新聞中心
Python 中函數(shù)的應(yīng)用非常廣泛,比如 input() 、print()、range()、len() 函數(shù)等等,這些都是 Python 的內(nèi)置函數(shù),可以直接使用。

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供武都網(wǎng)站建設(shè)、武都做網(wǎng)站、武都網(wǎng)站設(shè)計(jì)、武都網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、武都企業(yè)網(wǎng)站模板建站服務(wù),10年武都做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
3.1 def語(yǔ)句和參數(shù)
如果調(diào)用print()或者len()函數(shù),你會(huì)傳入一些值,放在括號(hào)之間,在這里稱為“參數(shù)”。也可以自己定義接收參數(shù)的函數(shù)。
>>> def hello (name):
print('hello '+ name)
>>> hello('alice')
hello alice
>>> hello('bob')
hello bob
在這個(gè)程序的hello()函數(shù)定義中,有一個(gè)名為name的變?cè)??!白冊(cè)笔且粋€(gè)變量,當(dāng)函數(shù)被調(diào)用時(shí),參數(shù)就存放在其中。
【注】保存在變?cè)械闹?,在函?shù)返回后就丟失了。
3.2 返回值和return語(yǔ)句
函數(shù)調(diào)用求值的結(jié)果,稱為函數(shù)的“返回值”。
用def語(yǔ)句穿創(chuàng)建函數(shù)時(shí),可以用return語(yǔ)句指定應(yīng)該返回什么值。return語(yǔ)句也包含以下部分
-
return 關(guān)鍵字
-
函數(shù)應(yīng)該返回的值或表達(dá)式
如果在return語(yǔ)句中使用了表達(dá)式,返回值就是該表達(dá)式求值的結(jié)果。
3.3 None值
在python中有一個(gè)值稱為None,他表示沒有值。None是NoneType數(shù)據(jù)類型的唯一值。 print()函數(shù)在屏幕上顯示文本,但他不需要返回任何值,這就和len()和input()不同。但既然所有函數(shù)調(diào)用都需要求值為一個(gè)返回值,那么print()就返回None
>>> spam = print('hello')
hello
>>> None ==spam
True
>>>
在幕后,對(duì)于沒有return語(yǔ)句的函數(shù)定義,python都會(huì)在末尾加上return None。這類似于while或者fo循環(huán)隱式的以continue語(yǔ)句結(jié)尾。而且,如果使用帶值的return語(yǔ)句(也就是只有return關(guān)鍵字本身),那么就返回None。
3.4關(guān)鍵字參數(shù)和print()
大多數(shù)參數(shù)是由他們?cè)诤瘮?shù)調(diào)用中的位置來識(shí)別的。但是“關(guān)鍵字參數(shù)”是有函數(shù)調(diào)用是加在他們前面的關(guān)鍵字來識(shí)別的。關(guān)鍵字參數(shù)通常用于可選變?cè)?。例如,print()函數(shù)有可選的變?cè)猠nd和sep,分別指定在參數(shù)末尾打印什么,以及在參數(shù)之間打印什么來隔開它們*
>>> print('dog','cat','mice')
dog cat mice
>>> print('dog','cat','mice',sep=',')
dog,cat,mice
>>>
3.5 局部作用域
在被調(diào)用函數(shù)內(nèi)賦值的變?cè)妥兞?,處于該函?shù)的“局部作用域”,在所有函數(shù)之外復(fù)制的變量,屬于“全局作用域”。處于局部作用域的變量,被稱為“局部變量”。處于全局作用域的變量,被稱為“全局變量”。一個(gè)變量必是其中的一種,不能既是全局有事局部的。 可以將“作用域”看成是變量的容器。當(dāng)作用域被銷毀時(shí),所有保存在該作用域內(nèi)的變量值就被丟棄了。
作用域很重要,理由如下:
-
全局作用域中的代碼不能使用任何局部變量
-
但是,局部作用域可以訪問全局變量
-
一個(gè)函數(shù)的局部作用域中的代碼,不能使用其他局部作用域中的變量
-
如果在不同的作用域中,你可以用相同的名字命名不同的變量
3.5.1 局部變量不能在全局作用域內(nèi)使用
def spam():
eggs = 111
spam()
print(eggs)
如果運(yùn)行這個(gè)程序就會(huì)出錯(cuò),eggs變量只屬于spam()調(diào)用所創(chuàng)建的局部作用域。
3.5.2 局部作用域不能使用其他局部作用內(nèi)的變量
def spam():
eggs = 99
bacon()
print(eggs)
def bacon()
ham = 101
eggs = 0
spam()
程序運(yùn)行時(shí),spam()被調(diào)用,創(chuàng)建一個(gè)局部作用域。局部變量eggs被賦值為99。然后bacon()函數(shù)被調(diào)用,創(chuàng)建第二個(gè)作用域。多個(gè)局部作用域能同時(shí)存在。在這新的局部作用域中,局部變量ham也被創(chuàng)建被賦值為101。局部變量eggs也被創(chuàng)建并賦值為0。 當(dāng)bacon()返回時(shí),這次調(diào)用的局部作用域被銷毀。程序執(zhí)行在spam()函數(shù)中繼續(xù),打印出eggs的值。這次spam()調(diào)用的局部作用域任然存在,eggs被賦值為99.
3.5.3 全局變量可以在局部作用域中讀取
def spam():
print(eggs)
eggs = 42
spam()
print(eggs)
3.6 global 語(yǔ)句
如果需要在一個(gè)函數(shù)內(nèi)修改全局變量,就是用global語(yǔ)句
有四條法則,來區(qū)分一個(gè)變量是處于局部作用域還是全局作用域
-
如果變量在全局作用域中使用(即在所有函數(shù)之外),它就是全局變量
-
如果在一個(gè)函數(shù)中,有針對(duì)該變量的global語(yǔ)句,它就是全局變量
-
否則,如果該變量用于函數(shù)中的賦值語(yǔ)句,它就是局部變量
-
但是,如果該變量沒有用在賦值語(yǔ)句中,它就是全局變量
3.7 異常處理
當(dāng)程序運(yùn)行出錯(cuò)時(shí),可以用try和except語(yǔ)句來處理。那些可能出錯(cuò)的語(yǔ)句被放在try子句中。如果錯(cuò)誤發(fā)生,程序執(zhí)行就轉(zhuǎn)到接下來的except子句開始處。
如果try子句中的代碼導(dǎo)致一個(gè)錯(cuò)誤,程序執(zhí)行就立即轉(zhuǎn)到except子句中的代碼,一旦執(zhí)行跳到except子句的代碼中,就不會(huì)回到try的子句中了
3.8一個(gè)小程序:猜數(shù)字
import random
secretNumber = random.randint(1,20)
print('i am think of number between 1 and 20:')
for guessesTaken in range(1,7):
print('take a guess')
guess = int(input())
if guess print('you guess is too low.')
elif guess > secretNumber:
print('you guess is too high')
else:
break
if guess == secretNumber:
print('good job!the number i was thinking of was ' + str(secretNumber)+
' and you guessed my number in ' + str(guessesTaken) + ' guesses')
else:
print('Nope. the number i was thinking of was ' + str(secretNumber))
3.9 實(shí)踐
Collatz 序列 編寫一個(gè)名為 collatz()的函數(shù),它有一個(gè)名為 number的參數(shù)。如果參數(shù)是偶數(shù),那么 collatz()就打印出 number // 2,并返回該值。如果 number是奇數(shù),collatz()就打印并返回 3 * number + 1。
然后編寫一個(gè)程序,讓用戶輸入一個(gè)整數(shù),并不斷對(duì)這個(gè)數(shù)調(diào)用collatz(),直到函數(shù)返回值1(令人驚奇的是,這個(gè)序列對(duì)于任何整數(shù)都有效,利用這個(gè)序列, 你遲早會(huì)得到 1!既使數(shù)學(xué)家也不能確定為什么。你的程序在研究所謂的“Collatz 序列”,它有時(shí)候被稱為“最簡(jiǎn)單的、不可能的數(shù)學(xué)問題”)。
在前面的項(xiàng)目中添加 try 和 except 語(yǔ)句,檢測(cè)用戶是否輸入了一個(gè)非整數(shù)的字符串。正常情況下,int()函數(shù)在傳入一個(gè)非整數(shù)字符串時(shí),會(huì)產(chǎn)生 ValueError 錯(cuò)誤,比如 int(‘puppy’)。在 except子句中,向用戶輸出一條信息,告訴他們必須輸入一個(gè)整數(shù)。
示例代碼1:
def collatz(number):
if number == 1:
return 1
elif number % 2 == 0:
numbers = number//2
print(numbers)
collatz(numbers)
elif number % 2 == 1:
numbers = 3*number+1
print(numbers)
collatz(numbers)
print('please input a number')
try:
number = int(input())
collatz(number)
except ValueError:
print('please input a integer number')
示例代碼 2:
def collatz(number):
if number % 2 == 0:
numbers = number//2
return numbers
else:
numbers = 3*number+1
return numbers
print('please input a integer number')
try:
number=int(input())
while collatz(number) != 1:
print(collatz(number))
new_number=collatz(number)
number = new_number
collatz(number)
print(collatz(number))
except ValueError:
print('please input a integer')
分享名稱:詳解Python函數(shù)
標(biāo)題路徑:http://m.fisionsoft.com.cn/article/ccscgdc.html


咨詢
建站咨詢
