1. 程式人生 > >Python之引數型別、變數

Python之引數型別、變數

一、引數型別

(一)形參與實參

  • 要使用區域性變數時,只能通過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