(0.1)函數參數的定義方式
位置形參
星號元組形參
命名關鍵字形參
雙星字典形參
1.位置形參
語法:
def 函數名(形參名1,形參名2,…………):
語句塊
例子:
len(args))
print("args =", args)def myadd(a, b, c, d): abcd為位置形參
return a + b + c + d
星號元組形參:
語法:
def 函數名(*元組形參名):
語句塊
作用: 收集多余的位置傳參
例子: def func(*args): print("實參個數") func(1,2,3,4) func(1,2,3,4) 不接受關鍵字傳參 關鍵字傳參: 語法: def 函數名 (*,命名關鍵字形參列表) def 函數名(*args,命名關鍵字形參)
雙星號字典形參
語法:
def 函數名(**字典形參名):
作用:
用於收集多余的關鍵字傳參
函數的參數說明:
位置形參,星號元組形參,命名關鍵字形參,雙星號字典形參和缺省形參可以混合使用
函數參數自左至右的順序為:
位置形參,星號元組形參,命名關鍵字形參,雙星號字典形參
def
可以接收任意的位置傳參和關鍵字傳參的函數
def fn (*args, **kwargs):
pass
示例:
mymax函數與max功能相同
函數變量 函數名是變量,它創建一個函數時綁定一個函數 示例: def f() #f為變量,f綁定一個函數 print("hello") print("world") f1 = f #註意f 沒有加() f1() #???? 示例2: def f1(): print("hello") def f2(): print("world") f1, f2 = f2, f1
一個函數可以做為另一個函數的參數
示例1:
def say_hello():
print("hello world")
def f2(f):
print(f)
f() #調用f變量綁定的函數
f2(say_hello) #????
示例2:
def goodbye(L):
for x in L:
print("再見", x)
def hello(L):
for x in L:
print("您好", x)
def operator(fn, L):
fn(L)
#調用fn綁定的函數
operator(goodbye,["tom", "jerry"])
示例3:
def myadd(x, y)
return x + y
def mymul(x, y)
return x * y
def get_op(s):
if s == "加"
return myadd
elif s == "乘"
return mymul
s = input("請輸入公式:")
L = s.split()
a = int(L[0])
b = int(L(2))
fn = get_op([L])
print("結果是:",fn(a, b)
函數的嵌套:
函數的嵌套是指一個函數用def語句來創建其他的函數的情況
示例:
def fn_otter():
print("fn_outter被調用!")
def fn_inner():
print("fn_inner():
全局變量和局部變量
局部變量
定義在函數內部的變量名稱為局部變量(函數的形參也是局部變量)
局部變量只能在函數內部使用
局部變量在函數調用時被自動創建,在函數調用之後自動銷毀
全局變量
定義在函數外部,模塊內部的變量為全局變量
全局變量,所有的函數都可以直接訪問(但函數內不能將其直接賦值)
python作用域
作用域也叫命名空間,是訪問變量時查找變量名的範圍空間
python的四個作用域LEGB
作用域
局部作用域(函數內) Local Function L
外部嵌套函數作用域 Enclosing function locals E
函數定義所在模塊的作用域 Global(module) G
python內置模塊作用域 Builtin(python) B
變量名的查找規則:
在訪問比變量時,先查找本地變量,然後是包裹此函數的外部函數內的變量,之後是全局變量,最後是內置變量
L -> E -> G -> B
示例:
註意: 在訪問比變量時,先查找本地變量,然後是包裹此函數的外部函數內的變量,之後是全局變量,最後是內置變量
v = 100#全局變量
def fun1():
v = 200#局部變量,也是fun2外部嵌套的作用域的變量
def fun2():
v = 300#局部變量
print(v)
fun2()
fun1()
函數在找函數是以自內向外查找的方式………
刪除本地的變量,全局變量就會被調用…………
python作用域
作用域也叫命名空間,是訪問變量時查找變量名的範圍空間
python的四個作用域LEFG
作用域
局部作用域(函數內) Local Function L
外部嵌套函數作用域 Enclosing function locals E
函數定義所在模塊的作用域 Global(module) G
python內置模塊作用域 Builtin(python) B
變量名的查找規則:
在訪問比變量時,先查找本地變量,然後是包裹此函數的外部函數內的變量,之後是全局變量,最後是內置變量
L -> E -> G -> B
在默認的情況下,變量賦值會創建或者修改本地作用域的變量
v = 100
def f():
print(v)
v = 200
f()
global語句
作用:
告訴解釋器,global語句聲明的一個或多個變量,這些變量的作用域為模塊級的作用域,也稱作全局變量
全局聲明(global)將賦值變量映射到模塊文件內部的作用域
語法:
global 變量1 變量2,…………
global聲明:
全局變量如果要在函數內部被賦值,則必須經過全局聲明(否則會被認為是全局變量)
全局變量在函數內部不經過聲明就可以直接訪問(如果變量已經在且關聯一個對象)
不能聲明局部變量,再用global聲明為全局變量,次做法不符合規則
global變量列表裏的變量名不能出現在此形參列表裏
nonlocal語句
作用:
告訴解釋器,nonlocal聲明的變量不是局部變量,也不是全局變量,而是外部嵌套內的變量
語法:
nonlocal 變量1 變量2 …………
示例:
說明:
1.nonlocal語句只能在被嵌套的函數內部進行使用
2.訪問nonlocal變量將對外部嵌套函數作用域內的變量進行操作
3.當有兩層或兩層以上函數嵌套時,訪問nonlocal變量只對最近的一層變量進行操作
4.nonlocal語句的變量列表的變量名,不能出現在此函數的參數列表中
var = 100
2.
def outter():
var = 200
1.
def inner():
nonlocal var
var += 1
3:
inner()
print("outter.var=", var)
4.
outter()
print("global var=", var)
示意:
def f1():
v = 100:
def f2():
v = 200:
def f3():
nonlocal v
f3():
f2():
f1():
練習:
def mysum(n):
....n < 0:
for x in
n = int(input("請輸入一個整數:"))
print(mysum(n))
代碼# mysum.py
def mysum(n):
#方法一: s = 0
for x in range(1, n + 1):
s += x
return s
#方法二:
return sum(range(1, n + 1))
n = int(input("請輸入一個整數:"))
print(mysum(n))
2.
給出一個數n寫一個函數來計算n!(n的階乘)
n! = 123*...n
3.
給出一個數n寫一個函數來計算1+2**2 + 3**3 +...+n**n的和
(0.1)函數參數的定義方式