# 函式,函式也是乙個物件
# 物件是記憶體中用來儲存資料的區域。
# 函式可以用來儲存一些可執行**,並且在需要的時候對這些**多次呼叫。
# 建立函式:
# def 函式名():
# **塊
def fn():
print('this is my first function')
# 函式中的**塊不會直接執行,需要呼叫該函式fn()後才會執行。
print(fn,type(fn))
fn()
# 定義函式求兩個數之和,定義函式時指定形參
def sum(num1,num2):
return int(num1) + int(num2)
# 呼叫函式時傳遞實參
print(sum(12,44))
# 求任意三個數的乘積
def mul(a,b,c):
print(a*b*c)
mul(1,2,3)
# 定義形參時,可以為形參指定預設值
# 指定預設值後,如果傳遞了引數則預設值無效。如果沒有傳遞引數,就會使用預設值。
# 實參的傳遞方式,位置引數:就是將對應位置的實參複製給對應位置的形參。
# 第乙個實參賦值給第乙個形參...
# 關鍵字引數:可以不按照形參定義的順序去傳遞引數,
# 而是根據引數名去傳遞引數
# 位置引數和關鍵字引數可以混合使用,但是位置引數必須寫在關鍵字引數前面。
# 函式在呼叫時,解析器不會檢查實參的型別,實參可以傳遞任意型別的物件。
b = 123
b = true
b = none
b = '123'
print(sum(12,b))
# 在函式中形參進行重新賦值不會影響其他變數
# 如果形參是乙個物件,通過形參去修改物件時會影響到所有指向該物件的變數。
def fn4(a):
a[1] = 11
print(a)
c = 10
c = [1,2,3]
fn4(c)
print(c)
# 不定長引數,
# 定義函式時,可以在形參前邊加上*,這樣將會獲取所有的實參
# 實參會儲存到乙個元組中,
def fn2(*a):
print(a)
fn2(1,2,3)
# 帶*號的形參只能有乙個,並且可以和其他引數配合使用
def fn3(a,b,*c):
print(a,b,c)
fn3(1,2,3,4,5,6)
# 可變引數不是必須寫在最後,但是帶*的引數後的所有引數必須以關鍵字引數形式傳遞。
# c必須使用關鍵字引數
def fn5(a,*b,c):
print(a,b,c)
fn5(1,2,3,4,5,c=8)
# 如果第乙個引數就是*號開頭,後面的引數必須都使用關鍵字引數
def fn6(*a,b,c):
print(a,b,c)
fn6(1,2,3,b=4,c=0)
# 形參只接收位置引數,不接受關鍵字引數
def fn7(*a):
print(a)
fn7(12)
# **形參可以接收其他的關鍵字引數,會將這些引數儲存在字典中。
# 字典的key就是引數名,value就是引數的值。
# **形參只能有乙個,並且必須寫在所有引數的最後
def fn8(a,b,**c):
print(a,b,c)
fn8(a=1,b=2,c=4,d=9,f=8)
# 引數的解包
t = (10,20,30)
def fn(a,b,c):
print(a,b,c)
# 傳遞實參時,也可以在序列型別的引數前新增*號,
# 這樣會自動將序列中的元素依次作為引數傳遞,
# 但是要求序列中元素的個數必須個形參的個數一致。
fn(*t)
# 通過**來對字典進行解包操作
d =
fn(**d)
# 返回值:就是函式執行以後返回的結果
# 可以通過return來指定函式的返回值
# return後面跟什麼型別值,就會返回什麼型別值,
# 可以返回任意物件,也可以返回乙個函式
# return後面的**都不會被執行
# 如果不寫return 或者只寫乙個return,預設返回none。
def sums(*nums):
result = 0
for num in nums:
result += num
if result > 10 :
return result
else :
return fn9()
def fn9():
print('hello')
return
sums(1,2)
# fn9和fn9()區別
print(fn9) # 只是列印函式物件,沒有呼叫
print(fn9()) # 呼叫函式
# help() 是python中的內建函式,通過help()函式可以查詢函式的用法
# 語法 help(函式物件)
help(print)
# 文件字串
# 在定義函式時,可以在函式內部編寫文件字串,
# 文件字串就是函式的說明
# 編寫文件字串時,可以通過help()函式檢視函式說明
def fn(a:int,b:bool,c:str):
'''這就是文件字串,也是就文件注釋
'''return 12
# 作用域(scope):指變數生效的區域。
# 作用域一共有兩種:
# 全域性作用域
# 全域性作用域在程式執行時建立,結束後銷毀
# 所有函式以外的區域都是全域性作用域
# 全域性作用域中定義的變數都屬於全域性變數,全域性變數可以在任意位置訪問。
# 函式作用域
# 函式作用域在函式呼叫時建立,呼叫結束銷毀
# 函式每呼叫一次救護產生乙個新的函式作用域
# 在函式中定義的變數都是區域性變數,只能在函式中訪問
# 變數查詢
# 使用變數時,會優先在當前作用域中查詢變數,有則直接使用,
# 如果沒有繼續在上一級作用域中查詢,依次類推,如果全域性作用域中也沒有找到變數則會報錯。
a = 11
def fn():
# global a # 在函式內部宣告全域性變數,就可以將其作為全域性變數修改。
a = 1
print(a)
def fn2():
a = 2
print(a)
fn2()
fn()
# 命名空間:變數儲存的位置,每乙個變數都需要儲存到指定的命名空間彙總
# 每乙個作用域都有乙個對應的命名空間
# 全域性命名空間用來儲存全域性變數,函式命令空間用來儲存函式中的變數
# 命名空間實際就是乙個儲存變數的字典。
# 使用locals()獲取當前作用域的命名空間
scope = locals()
print(scope)
# 函式內部命名空間
def fn():
a = 10
gl = globals() # 在任意位置獲取全域性作用域的命名空間
scope = locals()
print(scope)
fn()
Python基礎 十四 函式作用域
1 變數的作用域 2 命名空間 3 python legbdef test a 10 print a test 列印 10 複製 e enclosing function locals 外部巢狀函式的命名空間def test a 10 def inner print a inner test 列印 ...
Python基礎(作用域 內建函式)
作用域 概念 作用域指的是變數在程式中的應用範圍 作用域按照變數的定義位置可以分為4類 l e g b local 函式內部 區域性作用域 enclosing 巢狀函式的外層函式內部 巢狀作用域 global 模組全域性 全域性作用域 built in 內建 內建作用域 123 456訪問順序 l ...
Python 函式作用域
python中變數作用域分4種情況 x max 1,6 max為系統變數,它的作用域為python的所有模組 y 1 y為全域性變數,它的作用域為當前模組 defouter i 3 i的作用域為當前函式,包括巢狀函式 definner count 2 count為區域性變數,作用域只在當前函式有效函...