1.局部變數和全局變數 在函數外定義的不可變數據類型,在函數裡面是可讀不可寫在函數外定義的可變數據類型,在函數裡面可讀可寫不可變類型傳入函數,進行的操作不會影響到外面的變數但是當我們聲明一個變數為全局變數後,進行的操作會影響到函數外的變數 可變數據類型,傳入和直接使用都會改變原本的數據不可變數據類型 ...
1.局部變數和全局變數
在函數外定義的不可變數據類型,在函數裡面是可讀不可寫
在函數外定義的可變數據類型,在函數裡面可讀可寫
不可變類型傳入函數,進行的操作不會影響到外面的變數
但是當我們聲明一個變數為全局變數後,進行的操作會影響到函數外的變數
可變數據類型,傳入和直接使用都會改變原本的數據
不可變數據類型 直接使用是可讀不可寫的
傳入後的操作不會對函數外的變數造成影響
聲明為全局變數後,可讀可寫,並且會對函數外的變數造成影響
# 1.在函數外定義的不可變數據類型 # 在函數裡面是可讀不可寫 b = 1 def func(): print(b) # 可以運行成功 # b += 1 # 報錯 # print(b) func()
# 2.不可變類型傳入函數,進行的操作不會影響到外面的變數 # 但是參數可以傳進來 b = 1 def func(b): b += 1 print(b) func(b) # 2 print(b) # 1
# 3.在函數外定義的可變數據類型 # 在函數裡面可讀可寫 l1 = [1, 2, 3] def func(): l1.append(6) print(l1) func()
# # 4.global # # 只能在一個局部的情況下使用 # # 當一個函數外的不可變數據類型在函數內讀和寫並對原本的變數修改時,用global聲明 b = 1 def func(): # global 聲明一個變數為全局變數 global b b += 1 print(b) func() # 2 # 但是當我們聲明一個變數為全局變數後,進行的操作會影響到函數外的變數 print(b) # 2
# 例子 my_money = 10000 def add(money: int): # 形參money """獎金加錢""" global my_money my_money += money print(f'當前餘額{my_money}') def reduce(money: int): # 形參money """罰款減錢""" global my_money # 註意這裡也要聲明!!! my_money -= money print(f'當前餘額{my_money}') add(1000) # 實參1000 add(2000) reduce(4000) reduce(666)
2.函數傳參
# 1.形參與實參
# 形參和實參的個數需要一樣
# 實參形參的位置順序必須一樣
def func(name, age): # 形參 print(f'我的名字是{name},我的年齡是{age}') my_name = '小明' my_age = 20 func(my_name, my_age) # 實參
# 2.關鍵字參數
# 關鍵字傳參 關鍵字不需要加引號
# 優點:可以打亂參數的傳入順序
# 需要註意:關鍵字參數一定全都要寫到最後面
# 不過一般是如果寫關鍵字就都寫關鍵字了
def func(money, name, age): # 形參 print(f'我的名字是{name},我的年齡是{age}\n' f'我的錢是{money}') my_name = '小明' my_age = 20 func(100, age=my_age, name=my_name) # 實參
# 3.預設參數
# 可寫可不寫
# 不寫則使用預設參數
# 寫了則使用傳入的參數
# 預設參數一定要寫在最後,否則報錯
def func(name, age, money=1000, gender='男'): # 預設參數gender print(f'我的名字是{name},我的年齡是{age}\n' f'我的錢{money},我的性別{gender}') my_name = '小明' my_age = 20 func(my_name, my_age, 100, '女') # 實參
# 4.不定長參數 不定長關鍵字參數
# *args 也可以是*a *xxx
# **kwargs 也可以是**a **xxx
# key word args
# 加了一個星號 * 不定長參數會以元組(tuple)的形式導入,存放所有未命名的變數參數。
# 加了兩個星號 ** 的參數會以字典的形式導入,存放已命名的變數參數。
def func(name, *args): print(args) # 是元組 print(*args) # 包本身 一般不會使用*args而使用args print(f'{name}菜裡面的調料有{args}') func('小明', '番茄醬', '辣椒粉', '孜然粉') def func1(name, **kwargs): print(kwargs) # print(**kwargs) # 報錯 print(f'{name}菜裡面的調料有{kwargs}') func1('小明', t1='番茄醬', t2='辣椒粉', t3='孜然粉')
今日作業
# 定義一個模擬ATM機操作的場景 # 1)需要一個存錢和取錢的函數 # 2)設置全局預設資金1000 # 3)調用存錢函數,存放800元,並將操作後函數將餘額列印出米(1000+800= 1800) # 4)調用取錢函數,取錢500元,並將操作後函數將餘額列印出來(1800-500=1300) money = 1000 def add_money(money1: int): """存錢函數""" global money # 聲明money為全局變數 money += money1 print(f'餘額是{money}') def reduce_money(money2: int): global money # 註意這裡也要聲明!!! money -= money2 print(f'餘額是{money}') add_money(800) # 調用存錢函數,存放800元 reduce_money(500) # 調用取錢函數,取錢500元