1. 程式人生 > >(0.1)函數參數的定義方式

(0.1)函數參數的定義方式

def 方式 模塊 聲明 對象 函數名 練習 直接 local

函數參數的定義方式:
位置形參
星號元組形參
命名關鍵字形參
雙星字典形參

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)函數參數的定義方式