社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python之函数的参数

Goyakod • 7 年前 • 273 次点击  

Python中函数的参数有五种:位置参数(必选参数)、默认参数、可变参数、关键字参数、命名关键字参数。

#位置参数

//定义位置参数函数
def sayHello(name):
	print('hello',name)

//调用函数
sayHello('Tom')

调用结果: ('hello', 'Tom')

此时的sayHello(name)函数,参数name是一个位置参数。

当调用函数的时候,必须传入一个参数。其他方式调用都会报错:

//无参数调用
sayHello()
TypeError: sayHello() takes exactly 1 argument (0 given)
//多参数调用
sayHello('Tom','Jarry')
TypeError: sayHello() takes exactly 1 argument (2 given)

#默认参数

//定义具有默认参数的函数
def sayHello(name,greet='Hello'):
	print(greet,name)
//调用函数
sayHello('Tom')
sayHello('Jarry','Hai')

调用结果: ('Hello', 'Tom') ('Hai', 'Jarry')

默认参数的好处不言自明,它能够简化函数的调用。设置默认参数的时候,需要注意的是:必选参数在前,默认参数在后,否则会报错。

但函数有多个默认参数时,调用的时候,既可以按顺序提供默认参数,也可以不按顺序;当不按顺序提供参数的时候,要把参数名写上。举个栗子:

def sayHello(name,greet='hello',word='how are you?'):
	print(greet,name,word)

sayHello('Tom',word = 'how do you do?')

调用结果: ('hello', 'Tom', 'how do you do?')

#可变参数 可变参数的函数允许传入任意个参数,这些可变参数在函数调用的时候会自动组装成一个tuple。

//定义可变参数的函数
def sayHello(*saySomething):
	for tmp in saySomething:
		print(tmp)
//调用函数 以下方式调用都没问题
sayHello('Sawadika','Jarry')
sayHello('nihao','BOBO','how do you do ?')
sayHello('hello','Tom','how are you ?')

如果已经有一个list或者tuple,要调用可变参数的函数怎么办?可以这样:

//已有的list
somethings = ['nihao','Zhangye','how do you do ?']
//加*即可
sayHello(*somethings)

调用结果: nihao Zhangye how do you do ?

#关键字参数 关键字参数的函数允许传入任意个含参数名的参数,这些关键字参数在函数内部自动组装成一个dict

//定义一个关键字参数
def sayHello(**saySomething):
	print(saySomething)

//调用关键字参数的函数
sayHello(name='TOM',greet='hello',word='How do you do')
sayHello(name='BOBO',word='how are you')
sayHello(name='JHON')

调用结果: {'word': 'How do you do', 'name': 'TOM', 'greet': 'hello'} {'word': 'how are you', 'name': 'BOBO'} {'name': 'JHON'}

与可变参数类似,如果已经有一个dict,允许把dict当做参数直接传进去:

//已有的dict
para = {'name':'BOBO','greet':'nihao'}
//定义关键字参数
def sayHello(**parameters):
	if 'name' in parameters:
		print('name is',parameters['name'])
	if 'greet' in parameters:
		print('greet is',parameters['greet'])
	if 'word' in parameters:
		print('word is',parameters['word'])
//调用
sayHello(**para)

调用结果: ('name is', 'BOBO') ('greet is', 'nihao')

#命名关键字参数 使用关键字参数的函数,允许传入任意不受限制的关键字参数,我们只能在函数内部进行检查参数;如果要限制关键字参数的名字,就可以用命名关键字参数

//定义一个命名关键字参数函数
def sayHello(name, *, greet='nihao', word):
	print(greet,name, word)
//调用
sayHello('TOM',greet='hello',word='how are you')
sayHello('TOM',word='how do you do')

调用结果: hello TOM how are you nihao TOM how do you do

特别注意:命名关键字参数是python3的语法,python2.7不兼容。

#最后 以上介绍的函数的五种参数都可以组合使用,除了可变参数无法和命名关键字参数混合。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数/命名关键字参数和关键字参数。

本文整理资料来自:参考廖雪峰的Python教程


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/oLK3A0XnFM
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/4686
 
273 次点击