python基礎 函式,作用域介紹(八)

2021-09-23 08:13:12 字數 3802 閱讀 1602

# 函式,函式也是乙個物件

# 物件是記憶體中用來儲存資料的區域。

# 函式可以用來儲存一些可執行**,並且在需要的時候對這些**多次呼叫。

# 建立函式:

# 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為區域性變數,作用域只在當前函式有效函...