函式 引數 變數作用域

2021-08-21 13:12:05 字數 3716 閱讀 3379

一、函式引數

1.必須引數

必需引數須以正確的順序傳入函式。呼叫時的數量必須和宣告時的一樣。

呼叫printme()函式,你必須傳入乙個引數,不然會出現語法錯誤:

小括號內的就是引數

小括號內沒東西叫做無參,有叫有參

求任意三個數之和

在定義函式的時候小括號內寫的是變數名字,不需要賦值

在呼叫函式的時候小括號內的是給變數賦的值

定義函式的時候小括號中的變數叫做形參

呼叫函式的時候小括號的值叫實參

形參:形式引數,變數

實參:實際引數,值

實參給形參賦值

'''2.關鍵字引數

關鍵字引數和函式呼叫關係緊密,函式呼叫使用關鍵字引數來確定傳入的引數值。

使用關鍵字引數允許函式呼叫時引數的順序與宣告時不一致,因為 python 直譯器能夠用引數名匹配引數值。

'''# #以下例項在函式 printme() 呼叫時使用引數名:

# def printme(str):

# print(str)

# printme(str="姜新科")

# #以下例項中演示了函式引數的使用不需要使用指定順序:

# def printinfo(name, age):

# print("名字: ", name)

# print("年齡: ", age)

# printinfo(age=18, name="姜新科")

3.預設引數

預設引數就是在定義函式引數的時候給變數乙個初值

預設引數必須放在最後

呼叫函式時,如果沒有傳遞引數,則會使用預設引數。

以下例項中如果沒有傳入 age 引數,則使用預設值:

'''# def printinfo(name, age=20):

# "列印任何傳入的字串"

# print("名字: ", name)

# print("年齡: ", age)

## printinfo(age=18, name="姜新科")

# print("------------------------")

# printinfo(name="姜新科")

4.不定長引數:必須放在後邊

你可能需要乙個函式能處理比當初宣告時更多的引數。

這些引數叫做不定長引數,和上述 2 種引數不同,宣告時不會命名。基本語法如下:

'''#加了星號 * 的引數會以元組(tuple)的形式匯入,存放所有未命名的變數引數。

# def printinfo(arg1, *vartuple):

# print(arg1)

# print(vartuple)

# printinfo(10)

# printinfo(70, 60, 50)

#4.1練習

def jj(a,*b):

ji=a

for i in b:

ji*=i

print(ji)

jj(1,2,3,4,5,6)

# #如果在函式呼叫時沒有指定引數,它就是乙個空元組。我們也可以不向函式傳遞未命名的變數。如下例項:

## def printinfo(arg1, *vartuple):

# print('a',arg1)

# for var in vartuple:

# print(var)

# printinfo(10)

# printinfo(70, 60, 50)

## #加了兩個星號 ** 的引數會以字典的形式匯入。

# def printinfo(arg1, **dict):

# print(arg1)

# print(dict)

# printinfo(1, a=2, b=3)

#宣告函式時,引數中星號 * 可以單獨出現,如果單獨出現星號 * 後的引數必須用關鍵字傳入

# def printinfo(a,*,b,c):

# return a+b+c

# # printinfo(1,2,3)#報錯

# print(printinfo(1,b=2,c=3)) # 正常

4.2#不定長引數一般寫法

def fun3(*args,**kwargs):

print(args)

print(kwargs)

fun3(1,2,3,x=1,y=2)

二、變數作用域

'''

變數作用域

python 中,程式的變數並不是在哪個位置都可以訪問的,訪問許可權決定於這個變數是在**賦值的。

變數的作用域決定了在哪一部分程式可以訪問哪個特定的變數名稱。python的作用域一共有4種,分別是:

l (local) 區域性作用域

e (enclosing) 閉包函式外的函式中

g (global) 全域性作用域

b (built-in) 內建作用域

以 l –> e –> g –>b 的規則查詢,即:在區域性找不到,便會去區域性外的區域性找(例如閉包),再找不到就會去全域性找,再者去內建中找。

''''''

全域性變數和區域性變數

定義在函式內部的變數擁有乙個區域性作用域,定義在函式外的擁有全域性作用域。

區域性變數只能在其被宣告的函式內部訪問,而全域性變數可以在整個程式範圍內訪問。

呼叫函式時,所有在函式內宣告的變數名稱都將被加入到作用域中。如下例項:

'''# total = 0 # 這是乙個全域性變數

# def sum(arg1, arg2):

# # global total 加上這句話就能在函式內呼叫全域性變數了

# total = arg1 + arg2 # total在這裡是區域性變數.

# print("函式內是區域性變數 : ", total)

# return total

## sum(10, 20)

# print("函式外是全域性變數 : ", total)

'''global 和 nonlocal關鍵字

當內部作用域想修改外部作用域的變數時,就要用到global和nonlocal關鍵字了。

'''# num = 1

# def fun():

# global num # 需要使用 global 關鍵字宣告

# print(num)

# num = 123

# print(num)

# fun()

# print(num)

#如果要修改巢狀作用域中的變數則需要 nonlocal 關鍵字了,如下例項:

# def outer():

# num = 10

# def inner():

# nonlocal num # nonlocal關鍵字宣告

# num = 100

# print(num)

# inner()

# print(num)

# outer()

a=10

def test(a):

a = a + 1

print(a)

test(a)

函式引數,作用域

def foo x,y,args,a 1,b,kwargs print x,y print args print a print b print kwargs foo 1,2,3,4,5,b 8,c 4,d 5 1 2 3,4,5 18 後定義的引數,必須被傳值 有預設值的除外 且必須按照關鍵字實參...

Python函式詳解一(函式引數 變數作用域)

函式是python程式的重要組成部分。所謂函式就是實現某一特定功能的 段,可重複使用,提高了 的利用率。python除了可以直接使用內建函式,還支援自定義函式。使用def關鍵字,格式如下 def函式名 引數列表 函式體函式的返回值 函式的返回值用return語句返回,函式體內部的語句在執行時,一旦執...

Python函式引數傳遞以及變數作用域

使用 號,表示函式接受多個引數 def f args print args f 1 1,f 1,2,3 1,2,3 f f 1,2 1,2 使用 號,表示傳遞的是字典引數 def f1 args print args f1 a 1,b 2 3.將函式名作為引數傳遞 coding utf 8 用來支援...