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

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


咨詢
建站咨詢
