Python之引數型別、變數
阿新 • • 發佈:2018-11-26
一、引數型別
(一)形參與實參
- 要使用區域性變數時,只能通過return的方式返回
def my(name): #函式體 return name my('lrx') #name是形參,lrx是實參
- 不寫返回值的時候,返回的是None
def db_connect(ip,port=3306): print(ip,port) res= db_connect('xxx.xx.xx.xx',3307) print(res) #結果: #xxx.xx.xx.xx 3307 #None
(二)引數型別
1、位置引數
- 必傳引數
- 呼叫時如果不填實參會報錯
def my(name,sex): #name、sex是位置引數,呼叫時不填會報錯 return name my('lrx') #結果: #TypeError: my() missing 1 required positional argument
2、預設值引數
- 不必傳引數
- 呼叫時不填,就使用定義時的預設值
def db_connect(ip,port=3306): print(ip,port) db_connect('xxx.xx.xx.xx') #結果: #xxx.xx.xx.xx 3306
- 呼叫時填,就使用填的值
def db_connect(ip,port=3306): print(ip,port) db_connect('xxx.xx.xx.xx',3307) #結果: #xxx.xx.xx.xx 3307
3、
def my4(s:str,d:dict): #提示應該傳字串型別和字典型別 print(s) print(d) my4(123,'sdf') #傳的是數字型別和字串型別 #結果: #123 #sdf #結果不報錯,第一個是數字型別,第二個是字串型別
4、可變引數
5、關鍵字引數
return的作用:
- 結束函式,只要函式裡面遇到return就馬上結束。
- 返回函式的處理結果。
def my2(): for i in range(50): return i print(my2()) #結果: #0
變數賦值:
- 多變數賦值為數值,單變數賦函式值為元組:
def my3(): a=1 b=2 c=3 return a,b,c b,c,d=my3() print(b,c,d) s=my3() print(s) #結果: #1 2 3 #(1, 2, 3)
- 定義變數可以一起定義:
a,b,c=1,2,3
d=e=f=1
二、應用
1、操作檔案:當不傳預設值時,讀檔案,傳字典時,寫入json串。
import json def op_file_tojson(file_name,dic=None): if dic: with open(file_name,'w',encoding='utf-8') as f: json.dump(dic,f) else: f=open(file_name,encoding='utf-8') f.seek(0) content=f.read() if content: res=json.loads(content.strip()) else: res={} f.close() return res op_file_tojson('users.txt',{"abc":"123","sgds":"3434"}) print(op_file_tojson('users.txt')) #結果: #{'abc': '123', 'sgds': '3434'}
三、區域性變數與全域性變數
- 區域性變數:只能在函式內部使用,如果外面想要使用,只能通過return的方式。
- 全域性變數:在檔案裡都可以使用,如果函式內部沒有定義該變數,函式內部需要使用時就使用全域性變數。
name='lrx' #全域性變數 def get_name(): name='abc' print(name) get_name() #結果: #abc name='lrx' #全域性變數 def get_name(): #name='abc' print(name) get_name() #結果: #lrx
- 想要修改全域性變數,就要在變數前面先宣告一下,使用global關鍵字
- 只有string、int和元組才需要宣告
name='lrx' def get_name(): name='abc' print(name) get_name() print('函式外面的name',name) #結果: #abc #函式外面的name lrx name='lrx' def get_name(): global name name='abc' print(name) get_name() print('函式外面的name',name) #結果: #abc #函式外面的name abc
小練習:
name='lrx' def get_name(): global name name='abc' print('1、函式裡面的name',name) def get_name2(): print('2、get_name2',name) get_name2() get_name() print('3、函式外面的name',name) #結果: #2、get_name2 lrx #1、函式裡面的name abc #3、函式外面的name abc