国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python入門-函數(shù)

genefy / 2822人閱讀

摘要:函數(shù)返回值支持多個(gè),返回多個(gè)時(shí),使用逗號(hào)分隔。如上,與這個(gè)參數(shù)按照由左到右依次賦值給形參和供函數(shù)內(nèi)部使用。在傳入函數(shù)時(shí),便是將這個(gè)引用傳入了函數(shù)。需要使用關(guān)鍵字聲明將變量作用域變?yōu)楹瘮?shù)外部非全局變量,及閉包作用域。

< 返回索引頁

函數(shù)

函數(shù)定義

返回值

函數(shù)的調(diào)用

函數(shù)的參數(shù)

順序參數(shù)

參數(shù)的默認(rèn)值

可變參數(shù)

關(guān)鍵字參數(shù)

參數(shù)的組合

參數(shù)的專遞

函數(shù)作用域

內(nèi)建函數(shù)

匿名函數(shù)

函數(shù)注解

總結(jié)

練習(xí)

參考

函數(shù)

在維基百科上函數(shù)式這樣描述的:

函數(shù)在數(shù)學(xué)中為兩集合間的一種對(duì)應(yīng)關(guān)系:輸入值集合中的每項(xiàng)元素皆能對(duì)應(yīng)唯一一項(xiàng)輸出值集合中的元素。

此處的函數(shù)區(qū)別于我們數(shù)學(xué)上的函數(shù),在編程世界中,函數(shù)(Functions)是指可重復(fù)使用的程序片段。它們?cè)试S你為某個(gè)代碼塊賦予名字,允許你
通過這一特殊的名字在你的程序任何地方來運(yùn)行代碼塊,并可重復(fù)任何次數(shù)。這就是所謂的調(diào)用函數(shù)。我們已經(jīng)使用過了許多內(nèi)置的函數(shù),例如 lenrange

基本結(jié)構(gòu)如下:

def 函數(shù)名(參數(shù)列表):
    " 函數(shù)說明 "
    函數(shù)體
函數(shù)定義

在Python中,使用關(guān)鍵字def來定義一個(gè)函數(shù)。結(jié)構(gòu)如下:

def hello(name):  
    " 返回字符串"
    return name
    
def hello2():
    pass 

語法說明:

函數(shù)的參數(shù)支持多種形式

函數(shù)說明,可通過內(nèi)部方法hello.__doc__ 獲取

函數(shù)的返回值支持返回多個(gè)

我們可以使用 pass 來定義個(gè)空函數(shù)

下面來展開一一講述。

返回值

函數(shù)中返回值,使用關(guān)鍵字return 來表示,返回值可以是任意類型,當(dāng)沒有return語句時(shí)函數(shù)返回None。函數(shù)返回值支持多個(gè),返回多個(gè)時(shí),使用逗號(hào)分隔。如下:

def say_hello(name):
    print(name)
    return "Hello, %s" % name, name
函數(shù)的調(diào)用

函數(shù)的調(diào)用,上邊我們已經(jīng)使用了很多次了,函數(shù)名加上需要傳入的響應(yīng)參數(shù)即可。這里需要注意的是,在python中,一切結(jié)尾對(duì)象,當(dāng)然函數(shù)也是對(duì)象。函數(shù)名也可以作為參數(shù)傳遞到函數(shù)中使用。

def say_hello(name):
    print("hello, %s" % name)

def wapper(fun):
    print("調(diào)用之前做一些事")
    fun("Dean")
    print("調(diào)用之后做一些事")

wapper(say_hello)
"""
調(diào)用之前做一些事
hello, Dean
調(diào)用之后做一些事
"""
函數(shù)的參數(shù)

在程序設(shè)計(jì)中函數(shù)參數(shù)有2個(gè)比較通用的概念,形參和實(shí)參,在各高級(jí)語言中都會(huì)有。形參,即形式上的參數(shù),不占用內(nèi)存空間。實(shí)參,是實(shí)際真正的參數(shù)。

看下面這個(gè)實(shí)例:

def say_hello(name):  
    print("hello, %s" % name )
say_hello("Dean")

其中,函數(shù)參數(shù)name即為函數(shù)的形參。我們調(diào)用函數(shù)時(shí),傳入的參數(shù)Dean便是實(shí)參。在Python編程時(shí),這個(gè)概念并不是那么重要,此種了解即可。

順序參數(shù)

在Python 函數(shù)中,多個(gè)參數(shù)按照一定的順序依次傳入函數(shù),其值依次對(duì)應(yīng)賦給函數(shù)聲明時(shí)參數(shù),這種參數(shù)叫順序參數(shù)

def say_hello(name, age):
    print("hello, %s" % name)
    print("you age: %s " % age)

say_hello("Dean", 30)

如上,Dean與30 這2個(gè)參數(shù)按照由左到右依次賦值給形參nameage供函數(shù)內(nèi)部使用。需要注意的是,順序參數(shù)中,形參和實(shí)參的個(gè)數(shù)需要一直,否則函數(shù)會(huì)報(bào)調(diào)用錯(cuò)誤。

參數(shù)的默認(rèn)值

在函數(shù)聲明時(shí),可以給參數(shù)設(shè)置默認(rèn)值,如下:

def say_hello(name="Tim", age=20):
    print("hello, %s" % name)
    print("you age: %s " % age)

say_hello("Dean", 30)
say_hello("Dean")

當(dāng)函數(shù)參數(shù)設(shè)置默認(rèn)值后,該參數(shù)在調(diào)用函數(shù)時(shí),可以省略,省略時(shí)則會(huì)使用默認(rèn)值。有此可以退出,參數(shù)沒有設(shè)置默認(rèn)值,則是必傳的。

可變參數(shù)

有時(shí)候我們?cè)诼暶骱瘮?shù)時(shí),沒法確定函數(shù)的參數(shù)個(gè)數(shù),或者我們本身就想設(shè)計(jì)一種動(dòng)態(tài)的參數(shù),這種設(shè)計(jì)是否可以滿足呢?Python的函數(shù)對(duì)這種情況已做了考慮,提供了可變參數(shù)來滿足這種需求。

def say_hello(*args):
    print(args)
    for name in args:
        print("hello, %s" % name)

say_hello("Dean","Tim")
("Dean", "Tim")
hello, Dean
hello, Tim

可變參數(shù)使用*加一個(gè)形參來表示,其值為一個(gè)元組類型,元組內(nèi)的元素為我們傳入的實(shí)參。

關(guān)鍵字參數(shù)

在可變參數(shù)中,我們傳入函數(shù)的參數(shù)只能按順序或著通過下標(biāo)來獲取,那么可不可以給參數(shù)起一個(gè)名字呢,答案是可以的。Python 為這種情況提供了一種參數(shù)形式,叫做關(guān)鍵字參數(shù)

def say_hello(**kwargs):
        print("hello, %s" % kwargs["name"])
        print("you age: %s" % kwargs["age"])

say_hello(name="Dean", age=30)

使用**加一個(gè)形參來表示,其值為一個(gè)字典,key為我們實(shí)參中傳入的變量,value值為實(shí)參中的變量的值。

參數(shù)的組合

Python 函數(shù)中,以上參數(shù)可組合使用。當(dāng)參數(shù)組合使用時(shí),需要注意以下原則:

有默認(rèn)值的參數(shù)需要放在無默認(rèn)值參數(shù)的后邊

當(dāng)順序參數(shù)和可變參數(shù)混合使用時(shí),可變參數(shù)的取值為超出順序參數(shù)的實(shí)參部分,且可變參數(shù)在順序參數(shù)之后。

args 和 *kwargs 是 Python 的慣用寫法,變量名可以更換。

參數(shù)的常用排列順序?yàn)椋瑹o默認(rèn)值順序參數(shù)、有默認(rèn)值順序參數(shù)、可變參數(shù)、關(guān)鍵字參數(shù)。

def say_hello(name, age=30, *args, **kwargs):
    print(args)
    print(kwargs)

    print("hello, %s" % name)
    print("you age: %s" % age)
    print("address: %s" % kwargs["address"])

say_hello("Dean", 20, address="Beijing")
參數(shù)的專遞

我們?cè)谡{(diào)用函數(shù)時(shí),將實(shí)參傳遞給了函數(shù)的形參,供函數(shù)中邏輯代碼使用。那么在這個(gè)過程中,計(jì)算機(jī)內(nèi)存是一個(gè)怎么的過程呢?我們?cè)趯W(xué)習(xí)變量時(shí)知道,Python中的變量是其內(nèi)部存儲(chǔ)值的一個(gè)內(nèi)存地址或者叫做一個(gè)引用。在傳入函數(shù)時(shí),便是將這個(gè)引用傳入了函數(shù)。那么我們?cè)诤瘮?shù)內(nèi)部修改變量的值時(shí),是不是就修改了外部的變量的值呢?答案是不一定。

在我們學(xué)習(xí)基本數(shù)據(jù)結(jié)構(gòu)時(shí),我們知道有可變類型(字典、列表、集合)和不可變類型(數(shù)值、字符串、元組)。當(dāng)我們傳入函數(shù)的參數(shù)為可變類型時(shí),函數(shù)中的形參使用的內(nèi)存地址同實(shí)參的內(nèi)存地址,當(dāng)改變形參的值時(shí),實(shí)參的值也相應(yīng)跟著修改了。當(dāng)我們傳入的為不可變量時(shí),形參會(huì)重新分配一塊內(nèi)存地址保存實(shí)參傳給他的值,當(dāng)形參修改時(shí),實(shí)參自然不會(huì)修改。

來看下邊的例子:

# func.py 
def say_hello1(name):
    "不可變類型參數(shù)"
    name = "Time"
    print("name: %s" % name )


def say_hello2(user_dict):
    "可變類型參數(shù)"
    user_dict["name"] ="Time"
    print("name: %s" % user_dict["name"])

name = "Dean"
print("name before:", name)
say_hello1(name)
print("name after:", name)

user_dict = {"name":"Dean"}
print("user_dict before:", user_dict)
say_hello2(user_dict)
print("user_dict after:", user_dict)

"""
# 不可變參數(shù),值沒有變
("name before:", "Dean")
name: Time
("name after:", "Dean")

# 可變參數(shù),值變了
("user_dict before:", {"name": "Dean"})
name: Time
("user_dict after:", {"name": "Time"})
"""
函數(shù)作用域

在第三章,我們學(xué)習(xí)變量時(shí),知道變量的作用域決定了在哪一部分程序可以訪問哪個(gè)特定的變量名稱。在Python中,函數(shù)會(huì)重新開啟一個(gè)作用域,當(dāng)在函數(shù)內(nèi)部定義的變量,在函數(shù)外部是無法訪問的。那么該變量便是函數(shù)的局部變量,函數(shù)外部的變量便可成為全局變量

total = 0 # 這是一個(gè)全局變量
# 可寫函數(shù)說明
def sum( arg1, arg2 ):
    #返回2個(gè)參數(shù)的和.
    total = arg1 + arg2 # total在這里是局部變量.
    print ("函數(shù)內(nèi)是局部變量 : ", total)
    return total

#調(diào)用sum函數(shù)
sum( 10, 20 )
print ("函數(shù)外是全局變量 : ", total)

那么當(dāng)內(nèi)部的局部變量想要暴露出來給外部使用時(shí)如何實(shí)現(xiàn)呢?Python提供了2個(gè)關(guān)鍵字,gobalnonlocal

global 將變量作用域變?yōu)楹瘮?shù)外層全局作用域。

num = 1
def fun1():
    global num  # 需要使用 global 關(guān)鍵字聲明
    print(num) 
    num = 123
    print(num)
fun1()

nonlocal 將變量作用域變?yōu)楹瘮?shù)外部非全局變量,及閉包(Enclosing)作用域。

def outer():
    num = 10
    def inner():
        nonlocal num   # nonlocal關(guān)鍵字聲明
        num = 100
        print(num)
    inner()
    print(num)
outer()
內(nèi)建函數(shù)

內(nèi)建函數(shù),是Python中已經(jīng)定義好的函數(shù)可以在編寫代碼時(shí)直接使用。我們已經(jīng)使用過內(nèi)建函數(shù),如lenrange 等。更多的內(nèi)建函數(shù),可參閱官方文檔中函數(shù)說明。

匿名函數(shù)

匿名函數(shù),就是不使用def來定義的函數(shù)。Python中使用關(guān)鍵字lambda 來實(shí)現(xiàn)匿名函數(shù)。

# 語法
lambda [arg1 [,arg2,.....argn]]:表達(dá)式

語法說明:

arg為參數(shù),可以任意多個(gè),使用逗號(hào)分隔

表達(dá)式 為函數(shù)體,使用冒號(hào)開頭

表達(dá)式 的返回值即為函數(shù)的返回值

實(shí)例:

# 內(nèi)名函數(shù)
sum = lambda arg1, arg2: arg1 + arg2
 
# 調(diào)用sum函數(shù)
print ("相加后的值為 : ", sum( 10, 20 ))
print ("相加后的值為 : ", sum( 20, 20 ))
函數(shù)注解

函數(shù)注解,為函數(shù)和參數(shù)增加了一些說明特性。python3.0 新增的特性,見PEP3107。可通過函數(shù)的__annotations__ 熟悉查看。

def f(ham: 42, eggs: int = "spam") -> "Nothing to see here":
    print("Annotations:", f.__annotations__)
    print("Arguments:", ham, eggs)

f("wonderful")
"""
Annotations: {"eggs": , "return": "Nothing to see here", "ham": 42}
Arguments: wonderful spam
"""

def foo(a: "x", b: 5 + 6, c: list) -> max(2, 9):
    pass 

語法說明:

參數(shù)的說明在參數(shù)后邊,使用冒號(hào)和參數(shù)隔離,注釋為一個(gè)表達(dá)式。

函數(shù)的注解在函數(shù)參數(shù)括號(hào)后,使用"->" 符號(hào)開頭,也是一個(gè)表達(dá)式。

在Python的編程時(shí),注解使用的比較少,以方便人們更多的使用docstring來說明參數(shù)及返回值,另一方面Python函數(shù)參數(shù)可進(jìn)一步通過編碼規(guī)范一眼就能看出什么類型。這種注釋語法,反而顯得啰嗦冗余。

總結(jié)

本章我們學(xué)習(xí)了函數(shù)及其使用,知識(shí)重點(diǎn)總結(jié)如下:

Python提供了許多內(nèi)建函數(shù)共我們使用,內(nèi)建函數(shù)可直接使用無需定義。

參數(shù)組合在使用的時(shí)候是有順序的,依次是無默認(rèn)值順序參數(shù)、有默認(rèn)值順序參數(shù)、可變參數(shù)、關(guān)鍵字參數(shù)。

args 表示可變參數(shù),*kwargs 表示關(guān)鍵字參數(shù)。

當(dāng)參數(shù)為不可變參數(shù)時(shí),函數(shù)不會(huì)影響外部實(shí)參值,當(dāng)參數(shù)為不可變參數(shù)時(shí),函數(shù)則會(huì)影響外部實(shí)參值。

函數(shù)本身可作為參數(shù)傳遞。

Python 中使用lambda 來實(shí)現(xiàn)匿名函數(shù)。

練習(xí)

1、求n的階乘

def factorial(num):
    """
    求階乘
    :param num: 非負(fù)整數(shù)
    :return: num的階乘
    """
    result = 1
    for n in range(1, num + 1):
        result *= n
    return result

n = int(input("n = "))
factorial(n)

2、實(shí)現(xiàn)判斷一個(gè)數(shù)是不是素?cái)?shù)的函數(shù)。

# 素?cái)?shù),在大于1的自然數(shù)中,除了1和它本身以外不再有其他因數(shù)
def is_prime(num):
    for factor in range(2, num):
        if num % factor == 0:
            return False
    return True if num != 1 else False
參考

廖雪峰-python3教程

python官方文檔

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/42094.html

相關(guān)文章

  • Python爬蟲學(xué)習(xí)路線

    摘要:以下這些項(xiàng)目,你拿來學(xué)習(xí)學(xué)習(xí)練練手。當(dāng)你每個(gè)步驟都能做到很優(yōu)秀的時(shí)候,你應(yīng)該考慮如何組合這四個(gè)步驟,使你的爬蟲達(dá)到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學(xué)習(xí)不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲的設(shè)計(jì)方案,比如說。 (一)如何學(xué)習(xí)Python 學(xué)習(xí)Python大致可以分為以下幾個(gè)階段: 1.剛上手的時(shí)候肯定是先過一遍Python最基本的知識(shí),比如說:變量、數(shù)據(jù)結(jié)構(gòu)、語法...

    liaoyg8023 評(píng)論0 收藏0
  • 編程書單:十本Python編程語言的入門書籍

    摘要:本文與大家分享一些編程語言的入門書籍,其中不乏經(jīng)典。全書貫穿的主體是如何思考設(shè)計(jì)開發(fā)的方法,而具體的編程語言,只是提供一個(gè)具體場(chǎng)景方便介紹的媒介。入門入門容易理解而且讀起來幽默風(fēng)趣,對(duì)于編程初學(xué)者和語言新手而言是理想的書籍。 本文與大家分享一些Python編程語言的入門書籍,其中不乏經(jīng)典。我在這里分享的,大部分是這些書的英文版,如果有中文版的我也加上了。有關(guān)書籍的介紹,大部分截取自是官...

    desdik 評(píng)論0 收藏0
  • python的裝飾器入門小結(jié)

    摘要:使用一年多了,一直知道有個(gè)裝飾器,很好用,試圖理解過,可能由于資料找的不好,自己的悟性太差,一直沒有搞清楚,今天查了一些資料,算是理解了,現(xiàn)在簡(jiǎn)單記錄下。 使用python一年多了,一直知道python有個(gè)裝飾器,很好用,試圖理解過,可能由于資料找的不好,自己的悟性太差,一直沒有搞清楚,今天查了一些資料,算是理解了,現(xiàn)在簡(jiǎn)單記錄下。python的裝飾器本身的功能是在不改變已有函數(shù)本身的...

    SunZhaopeng 評(píng)論0 收藏0
  • ??【python入門項(xiàng)目】在 Python 中創(chuàng)建條形圖追趕動(dòng)畫(評(píng)論區(qū)送書)??

    動(dòng)畫是使可視化更具吸引力和用戶吸引力的好方法。它幫助我們以有意義的方式展示數(shù)據(jù)可視化。Python 幫助我們使用現(xiàn)有的強(qiáng)大 Python 庫創(chuàng)建動(dòng)畫可視化。Matplotlib是一個(gè)非常流行的數(shù)據(jù)可視化庫,通常用于數(shù)據(jù)的圖形表示以及使用內(nèi)置函數(shù)的動(dòng)畫。 直接跳到末尾 去評(píng)論區(qū)領(lǐng)書 ? 在 Python 中創(chuàng)建條形圖追趕動(dòng)畫(評(píng)論區(qū)送書) ? 方法一:使用 pause() 函數(shù)? 方法二:使用 F...

    h9911 評(píng)論0 收藏0
  • 我是如何入門機(jī)器學(xué)習(xí)的呢

    摘要:在這里我分享下我個(gè)人入門機(jī)器學(xué)習(xí)的經(jīng)歷,希望能對(duì)大家能有所幫助。相關(guān)學(xué)習(xí)鏈接,,入門后的體驗(yàn)在入門了機(jī)器學(xué)習(xí)之后,在實(shí)際工作中,絕大多數(shù)的情況下你并不需要去創(chuàng)造一個(gè)新的算法。 機(jī)器學(xué)習(xí)在很多眼里就是香餑餑,因?yàn)闄C(jī)器學(xué)習(xí)相關(guān)的崗位在當(dāng)前市場(chǎng)待遇不錯(cuò),但同時(shí)機(jī)器學(xué)習(xí)在很多人面前又是一座大山,因?yàn)榘l(fā)現(xiàn)它太難學(xué)了。在這里我分享下我個(gè)人入門機(jī)器學(xué)習(xí)的經(jīng)歷,希望能對(duì)大家能有所幫助。 PS:這篇文章...

    ShowerSun 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<