python中的函數

1.什麼是函數
函數是組織好的,可重複使用的,用來實現單一,或相關聯功能的代碼段。
函數能提高應用的模塊性,和代碼的重複利用率。
2.定義一個函數
1.函數代碼塊以 def 關鍵詞開頭,後接函數標識符名稱和圓括號()。
2.任何傳入參數和自變量必須放在圓括號中間。圓括號之間可以用於定義參數。
3.函數的第一行語句可以選擇性地使用文檔字符串—用於存放函數說明。
4.函數內容以冒號起始,並且縮進。
5.return [表達式] 結束函數,選擇性地返回一個值給調用方。不帶表達式的return相當於返回 None。

3.實例:
def hello():
print('hello')
print('python')

通過函數名來調用函數

hello()
python中的函數

4.#函數裏面嵌套函數
def westos():
print('is westos')
def python():
print('is python')
python()
westos()

python中的函數

5.參數
參數分爲形參和實參
定義函數的時候的變量,叫形參(形參可以任意起名)
def welcome(a):
print('hello',a)

調用函數的時候,真實的數據信息,調用函數的時候傳遞的參數叫實參
welcome('tom')
welcome('lily')
python中的函數

形參:位置參數 默認參數 可變參數 關鍵字參數
1.位置參數 (位置參數:形參和實參必須保持一致)
def getInfo(name,age):# 按照位置傳參數
print(name,age)
getInfo('westos',11)
getInfo(11,'westos')
getInfo(age=11,name='westos')

2.默認參數

def mypow(x,y=2): 定義函數,其中第二個形參的默認值爲2
print(x**y)
mypow(2,3) 當調用函數的時候,傳入兩個實參,則使用傳入的值進行運算
mypow(4) 當只傳入一個值的時候,另一個使用默認參數值進行運算

python中的函數

3.可變參數
當參數的個數不確定的時候,可以使用可變參數,來表示該函數可以接收任意個參數
在使用可變參數的時候:
其中a 表示對參數進行解包,將序列中的元素一個一個的拿出來。
a的對象類型是一個元組。
def mysum(
a): # 定義函數的形參數是任意個
print(a)
print(a)
sum = 0
for item in a:
sum += item
print(sum)
nums = [1,2,3,4]
nums1 = (1,2,3,4)
nums2 = {1,2,3,4}
mysum(
nums)
mysum(nums1)
mysum(
nums2)
#當實參是一個列表的時候,返回值
1 2 3 4 # 解包列表的得到的數據
(1, 2, 3, 4) # a的對象類型爲一個元組
10 # 最後的返回值

#當實參是一個元組的時候,返回值
1 2 3 4 # 解包元組的得到的數據
(1, 2, 3, 4) # a的對象類型爲一個元組
10 # 最後的返回值

#當實參是一個集合的時候,返回值
1 2 3 4 # 解包集合的得到的數據
(1, 2, 3, 4) # a的對象類型爲一個元組
10 # 最後的返回值

4 關鍵字參數
*k:是一個字典,可以傳遞任意多的key-value
def getStuInfo(name,age,*k):
print(name)
print(age)
print(k)
#如果要對字典進行解包,一個星號,獲取所有的key值
#print(
d)
getStuInfo('westos',11,a=1,b=2)

python中的函數

6.參數的返回值

返回值:函數運算的結果,還需要進一步操作,給函數一個返回值
return用來返回函數執行的結果,如果函數沒有返回值,默認返回None
一旦遇到return 函數執行結束,後面的代碼不會執行
多個返回值的時候,python會幫我們封裝成一個元組類型

def getStuInfo(name,age):
print(name)
print(age)
a = getStuInfo('toto',16)
print(a)

#顯示結果:
toto
16
None # 函數沒有返回值,函數執行的結果默認返回None

def getStuInfo(name,age):
print(name)
if name == 'toto' :
return 'name is toto' # 函數的返回值
print(age)
a = getStuInfo('toto',16)
print(a)

#輸出結果:
toto
name is toto # 存在返回值,並且成功返回該返回值,之後的代碼將不會再執行

6 、變量的作用域
個程序的所有的變量並不是在哪個位置都可以訪問的。訪問權限決定於這個變量是在哪裏賦值的。

變量的作用域決定了在哪一部分程序你可以訪問哪個特定的變量名稱。兩種最基本的變量作用域如下:
全局變量
局部變量

定義在函數內部的變量擁有一個局部作用域,定義在函數外的擁有全局作用域。
局部變量:在函數內部定義的變量,只在函數內部起作用,函數
執行結束後,變量會自動刪除

a = 1 這是一個全局變量
print('outside:',id(a))

def fun():
global a #聲明a爲全局變量
a = 5
print('inside:',id(a))
fun()
print(a)
print(id(a))

結果
outside: 9462560 外面定義的a的ID爲 9462560
inside: 9462688 在函數內定義a爲全局變量 a的指向5他的ID發生改變
5
9462688

python中的函數

案例1.
編寫一個函數cacluate, 可以接收任意多個數,返回的是一個元組.
元組的第一個值爲所有參數的平均值, 第二個值是大於平均值的所有數.

def cacluate(*x):
sum = 0
for i in x :
sum += i
average = sum/len(x)
li = []
for k in x :
if k > average :
li.append(k)
return (average,li)

#調用函數,測試效果
a = cacluate(2,6,8,9,2,5,7)
print(a)

python中的函數

案例2.
編寫一個函數, 接收字符串參數, 返回一個元組,‘ehllo WROLD’
元組的第一個值爲大寫字母的個數, 第二個值爲小寫字母個數.

python中的函數

編寫一個名爲collatz()的函數,它有一個名爲number的參數。
如果參數是偶數,那麼collatz()就打印出number//2,並返回
該值。如果number是奇數,collatz()就打印並返回3*number+1。
然後編寫一個程序,讓用戶輸入一個整數,並不斷對這個數
調用collatz(),直到函數返回值1(令人驚奇的是,這個序列
對於任何整數都有效,利用這個序列,你遲早會得到1!既使數學
家也不能確定爲什麼。你的程序在研究所謂的“Collatz序列”,
它有時候被稱爲“最簡單的、不可能的數學問題”)。

  • 輸入:
    3
  • 輸出:
    10
    5
    16
    8
    4
    2
    1

def collatz(number):
if number == 1:
exit()
elif number % 2 == 0:
return number // 2
else:
return 3 * number + 1

num = int(input('Num:'))
while True:
num = collatz(num)
print(num)

python中的函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章