程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【python基礎】函數的使用

編輯:Python

函數的使用

  • 一、創建函數和使用函數
  • 二、函數的作用域
    • (1)、全局變量
    • (2)、局部變量
  • 三、常見的四類參數
  • 四、匿名函數
  • 五、練習題
  • 六、遞歸函數

一、創建函數和使用函數

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

二、函數的作用域

(1)、全局變量

全局都生效的變量

name = 'admin'
def login():
print(name)
login()
#結果
admin

(2)、局部變量

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))

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved