python参数类型_Python 函数的参数类型

一、参数类型

(一)形参与实参

• 要使用局部变量时,只能通过return的方式返回

defmy(name):#函数体

print(name)

my('dabai')#name是形参,dabai是实参

•不写返回值的时候,返回的是None

def db_connect(ip,port=3306): #ip位置参数 port=3306默认值参数,不给参数默认是3306

print(ip,port)

res= db_connect('xxx.xx.xx.xx',8888)#结果:#xxx.xx.xx.xx 8888

(二)参数类型

1、位置参数\形式参数

• 形式参数,也叫位置参数

• 是必传参数

• 调用时如果不填实参会报错

def my(name,sex): #name、sex是位置参数,调用时不填会报错

print(name,sex)

my('lrx','nv')#结果:lrx nv

defdb_connect(ip,user,password,db,port):passdb_connect(user='lrx',ip='xxx.xx.xx.xx',port=3306,db='my1',password='123456')

db_connect('xx.xx.xx.xx','lrx',db='my1',password='123456',port=3306)

db_connect(ip='xx.xx.xx.xx','lrx',password='123456',db='my1',port=3306) #这样写报错#位置参数在传参时,如果开头指定了xx=xx,后面必须都有使用这种格式;如果开头没有指定,就按默认顺序传值

• 给参数一个提醒类型:调用时可以传入不同类型的参数,不受影响

def my4(s=str,d=dict): #提示应该传字符串类型和字典类型

print(s)print(d)

my4(123,'sdf') #传的是int类型和字符串类型#结果:#123#sdf#结果不报错,第一个是int类型,第二个是字符串类型

2、默认值参数

xxx=xxx的格式

是非必传参数

调用时不填,就使用定义时的默认值

def db_connect(ip,port=3306):print(ip,port)

db_connect('xxx.xx.xx.xx',3307) #传入3307就会打印出3307,不传就是默认是3306#结果:#xxx.xx.xx.xx 3307

3、可变参数

•是非必传参数

•使用参数名前面加一个星号表示

•它把传入的元素都存到一个元组里

•不限制传入参数的个数

•用在参数比较多的时候

def send_sms(*phone_num): #*phone_num:可变参数,参数组

print(phone_num)

send_sms()

send_sms('1')

send_sms('1','2','3')#结果:#()#('1',)#('1', '2', '3')

•通常使用args作为参数名

def send_sms(*args): #*args:可变参数,参数组

for p inargs:print(p)

4、关键字参数

• 是非必传参数

• 使用参数名前面加两个星号表示

• 不限制传参个数

•它是把传入的参数保存在一个字典里

• 如果传参,必须要传位置参数这种 k=v 的格式,否则报错。

• 通常使用kwargs当做变量名

def send_sms2(**kwargs):print(args)

send_sms2()#什么都不传,不会报错,会打印出空字典

send_sms2(addr='sfsdf')

send_sms2(name='xiaohei',sex='男')#结果:#{}#{'addr': 'sfsdf'}#{'name': 'xiaohei', 'sex': '男'}

5、参数组合使用

• 如果一个函数中必须要使用4种参数,那么一定要按照顺序写参数:

(1)位置参数(2)默认值参数(3)可变参数(4)关键字参数

def my(name,country='China',*args,**kwargs):print(name)print(country)print(args)print(kwargs)

my('xiaojun')#结果:#xiaojun#China#()#{}

def my(name,country='China',*args,**kwargs):print(name)print(country)print(args)print(kwargs)

my('xiaojun','USA','beijing','天通苑',color='red',age=23)#结果:#xiaojun#USA#('beijing', '天通苑')#{'age': 23, 'color': 'red'}

def my(name,country='China',*args,**kwargs):print(name)print(country)print(args)print(kwargs)

my('xiaojun','beijing','天通苑',color='red',age=23,country='hh')#结果:#TypeError: my() got multiple values for argument 'country'#由于前面已经给默认值参数赋值为beijing了,后面再赋值,代码就不知道该怎么办了。

return的作用:

• 结束函数,只要函数里面遇到return就马上结束

• 返回函数的处理结果

def my2():

for i in range(50):

return i

print(my2())

#结果:

#0

变量赋值:

• 多变量赋值为数值,单变量赋函数值为元组:

defmy3():

a=1b=2c=3

returna,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,3d=e=f=1

二、应用

1、操作文件:当不传默认值时,读文件,传字典时,写入json串

importjsondef op_file_tojson(file_name,dic=None):ifdic:

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()ifcontent:

res=json.loads(content.strip())else:

res={}

f.close()returnres

op_file_tojson('users.txt',{"abc":"123","sgds":"3434"})print(op_file_tojson('users.txt'))#结果:#{'abc': '123', 'sgds': '3434'}

三、局部变量与全局变量

• 局部变量:只能在函数内部使用,如果外面想要使用,只能通过return的方式

• 全局变量:在文件里都可以使用,如果函数内部没有定义该变量,函数内部需要使用时就使用全局变量

name='lrx' #全局变量

defget_name():

name='abc'

print(name)

get_name()#结果:#abc

name='lrx' #全局变量

defget_name():#name='abc'

print(name)

get_name()#结果:#lrx

• 想要修改全局变量,就要在变量前面先声明一下,使用global关键字

• 只有string、int和元组才需要声明

name='lrx'

defget_name():

name='abc'

print(name)

get_name()print('函数外面的name',name)#结果:#abc#函数外面的name lrx

name='lrx'

defget_name():globalname

name='abc'

print(name)

get_name()print('函数外面的name',name)#结果:#abc#函数外面的name abc

小练习:

name='lrx'

defget_name():globalname

name='abc'

print('1、函数里面的name',name)defget_name2():print('2、get_name2',name)

get_name2()

get_name()print('3、函数外面的name',name)#结果:#2、get_name2 lrx#1、函数里面的name abc#3、函数外面的name abc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值