1、創建函數和使用函數
定義函數不會執行
函數的輸入叫做參數,函數的輸出叫返回值
形參:形式參數,不是真實的值(定義函數時的時的參數,例如num1,num2)
實參:實際存在的參數,是真實的值(調用函數時的參數,例如30,80)
def get_max(num1,num2): 定義函數
result = num1 if num1 > num2 else num2
return result
max_num = get_max(30,80) 使用函數
print(max_num)
#結果
80
全局都生效的變量
name = 'admin'
def login():
print(name)
login()
#結果
admin
1、局部變量
局部生效的變量,函數內部的變量
def logout():
age = 19 這裡的age變量是局部的
logout()
print(age) 沒法輸出
#結果
NameError: name 'age' is not defined
2、 函數內部修改全局變量
這裡的mongey是全局變量
如果要在函數中修改全局的變量,不能直接修改。
如果要修改全局變量,需要使用global聲明修改的變量
def hello():
global money 聲明全局變量
money +=1
print(money)
money = 100
hello()
#結果
101
3、補充
針對可變數據類型:不用在定義函數裡面進行全局變量聲明
針對不可變數據類型:需要在函數裡面進行全局變量聲明
def hello():
global money 可變數據需要全局聲明
money +=1
users.append('user1')
print(money,users)
money = 100 不可變數據類型
users = [] 可變數據類型
hello()
#結果
101 ['user1']
三、參數傳遞
1、形參和實參
2、參數檢查
設置提示
def get_max(num1:int,num2:int)->int:
return num1 if num1 > num2 else num2
result = get_max('hello',1)
print(result)
設定好參數後這樣會有檢查提示
3、三個引號之間的會作為解釋說明,help可以展示說明
def get_max(num1:int,num2:int) -> int:
""" 求兩個數的最大值 param num1:整型數1 param num2:整型數2 """
return num1 if num1 > num2 else num2
result = get_max(2,1)
print(result)
print(help(get_max))
#結果
2
Help on function get_max in module __main__:
get_max(num1: int, num2: int) -> int
求兩個數的最大值
param num1:整型數1
param num2:整型數2
4、真正判斷參數類型
def get_max(num1:int,num2:int) -> int:
""" 求兩個數的最大值 param num1:整型數1 param num2:整型數2 """
if isinstance(num1, int) and isinstance(num2,int): 這裡是對參數進行判斷,是否為整型
return num1 if num1 > num2 else num2
else:
return 0
result = get_max(2,30.1)
print(result)
#結果
0 不是整型,因此返還為else的值0
1、必選參數
代碼中的必選參數是實參2,30
def get_max(num1: int, num2: int) -> int:
return num1 if num1 > num2 else num2
result = get_max(2, 30)
print(result)
print(help(get_max))
def pow(x, y=2):
return x ** y
2、默認參數
這裡默認參數是形參y=2
def pow(x, y=2):
return x ** y
result = pow(3) #這裡x=3,y使用默認參數y=2
print(result)
result = pow(2,4) #這裡x=2,改變默認參數使得y=4
print(result)
#結果
9
16
3、可變參數
參數的可數會變化,可以傳0,1,2,3,…n個參數
args=arguments
其類型是元組
def my_sum(*args):
print(args)
my_sum(1,2,3)
my_sum(1,2,4,5,6,)
my_sum(1)
my_sum()
#結果
(1, 2, 3)
(1, 2, 4, 5, 6)
(1,)
()
利用這種方式即可進行多個參數的計算
def my_sum(*args):
return sum(args)
result=my_sum(1,2,3)
print(result)
#結果
6
4、關鍵字參數:
可以傳遞key和value
**kwargs可以存貯在字典中
def enroll(name,age=18,**kwargs):
print(f""" 入學信息 1. 姓名:{
name} 2. 年齡:{
age} 3.其他:{
kwargs} """
)
enroll('張三',country='china',english='GRE',sport=['籃球'])
#結果
入學信息
1. 姓名:張三
2. 年齡:18
3.其他:{
'country': 'china', 'english': 'GRE', 'sport': ['籃球']}
匿名函數指一類無須定義標識符的函數或子程序。Python用lambda語法定義匿名函數,只需用表達式而無需申明。(省略了用def聲明函數的標准步驟)
示例1
get_max = lambda num1,num2:num1 if num1 > num2 else num2
result=get_max(1,10)
print(result)
#結果
10
示例2
get_max = lambda x,y=2:x ** y
result=get_max(4)
print(result)
#結果
16
將數組[0,7,0,2]輸出為[1,2,0,0]
采用算法和匿名函數結合的方式
解題思路
""" 0 7 0 2 排序前 1 0 1 0 指定規則:(1 if num==0 else 0) 0 0 1 1 7 2 0 0 排序後 """
nums = [0,7,0,2]
nums.sort(key=lambda num: 1 if num==0 else 0)
print(nums)
#結果
[7, 2, 0, 0]
將所有的偶數排前面,奇數排後面
nums = [1,10,2,4,8,17]
nums.sort(key = lambda num: 1 if num%2==1 else 0)
print(nums)
#結果
[10, 2, 4, 8, 1, 17]
1、遞歸的使用
需求:求n的階乘
方法1:for循環
res = 1
n = 3 #3!=3*2*1
for i in range(1,n+1):
res = res * i
print(res)
方法2:遞歸
n! = n*(n-1)!=n*(n-1)*(n-2)!
def f(n):
return 1 if n==1 else n*f(n-1)
print(f(5))
#結果
120
2、遞歸實現斐波那契數列
def fib(n):
if n ==1 or n==2: 這裡設定n=1,n=2時的值
return 1
else:
return fib(n-1)+fib(n-2)
print(fib(7))