您现在的位置是:网站首页> 编程资料编程资料

一文搞懂Python的函数传参机制_python_

2023-05-26 359人已围观

简介 一文搞懂Python的函数传参机制_python_

大家好,我是Peter~

最近写了Python函数的功能,犯了一些错误。本文主要是梳理下Python函数的传参机制,主要内容包含:

一、最简单的函数(无返回值、参数)

def hello_python(): print("hello python!") 
hello_python() # 直接调用 

输出:

hello python!

二、最简单的函数(带返回值、无参数)

def hello_python(): data = "hello python!" return data # data就是返回值 
hello_python() 

输出:

'hello python!'

三、带一个参数(无默认值)

def hello(data): result = "hello " + data return result 
hello("python") 

输出:

'hello python'

传入另一个值:

hello("java") 

输出:

'hello java'

还可以在内部修改参数的信息:

def hello_name(name): result = "Hello " + name.title() + "!" return result hello_name("tom") 

'Hello Tom!'

hello_name("jack") 

'Hello Jack!'

四、带有多个参数(无默认值)

def information(name, age): data = "我叫" + name.title() + ", 今年" + str(age) + "岁" return data 
information("tom", 23) 

'我叫Tom, 今年23岁'

information("JACK", 18) 

'我叫Jack, 今年18岁'

五、参数设置默认值(一个参数)

def hello_name(name="Peter"): result = "Hello " + name return result 

如果不给参数具体的值,就使用默认值

hello_name() 

'Hello Peter'

给参数一个实际的值,比如下面的例子中Tom就是实际的值;这就是常说的实参

hello_name(name="Tom") 

'Hello Tom'

六、参数设置默认值(多个参数)

def information(name="Peter", age=20): data = "我是" + name + ", 今年" + str(age) + "岁" return data 

1、全部使用默认值:

information() 

'我是Peter, 今年20岁'

2、全部传入实际的值:

information(name="Tom", age=27) 

'我是Tom, 今年27岁'

3、只传入部分参数的实际值;未传入的使用默认值:

information(name="Tom") 

'我是Tom, 今年20岁'

information(age=18) 

'我是Peter, 今年18岁'

七、部分参数使用默认值

默认值的参数一定要放在最后面;具有默认值的参数一定要放在最后面

def information(name, age=20): data = "我是" + name + ", 今年" + str(age) + "岁" return data 
information("Peter") # age默认使用20 

'我是Peter, 今年20岁'

information(name="Peter") 

'我是Peter, 今年20岁'

information("Peter", age=18) 

'我是Peter, 今年18岁'

下面的方式直接报错:

information(age=18, "Peter")  
  File "", line 1
    information(age=18, "Peter")
                       ^
SyntaxError: positional argument follows keyword argument

information(age=18, name="Peter") # age默认使用20 

'我是Peter, 今年18岁'

重点:在函数必须先列出没有默认值的形参,再列出有默认值的形参:

def information(age=20, name): data = "我是" + name + ", 今年" + str(age) + "岁" return data 

  File "", line 1
    def information(age=20, name):
                   ^
SyntaxError: non-default argument follows default argument

如何理解有默认值的参数一定要放在最后面?

下面自定义个get_name的函数,传入第一个、最后一个和中间的名字,但是并不是每个人都有中间名字:

def get_name(first_name, last_name, middle_name=''): if middle_name: # 如果存在中间名字 name = first_name + middle_name + last_name else: name = first_name + last_name return name 
get_name(first_name="张", last_name="飞", middle_name='') 

'张飞'

get_name(first_name="孙", last_name="空", middle_name='悟') 

'孙悟空'

如果不传递middle_name的结果肯定不是我们想要的:

get_name(first_name="孙", last_name="空") 

'孙空'

八、位置实参

def get_information(name, age): data = "我是" + name + ", 今年" + str(age) + "岁" return data 
get_information("Tom", 20) 

'我是Tom, 今年20岁'

get_information("20","Tom") # 一定要按照原来形参的顺序传递 

'我是20, 今年Tom岁'

上面的结果肯定不是我们想要的

九、关键字实参

当使用关键字传递实参的时候,和顺序无关:

get_information(name="Tom", age=20) 

'我是Tom, 今年20岁'

get_information(age=20, name="Tom") 

'我是Tom, 今年20岁'

十、位置实参和关键字实参混合使用

get_information("Tom", age=20) 

'我是Tom, 今年20岁'

在使用的时候还是要按照原函数中的顺序,否则报错:

get_information(age=20,"Tom") 

  File "", line 1
    get_information(age=20,"Tom")
                          ^
SyntaxError: positional argument follows keyword argument

十一、进阶:*args使用

有时候我们实现并不知道函数需要接受多少个参数,这个时候可以通过*args或者**kwargs的用法来收集任意数量的参数。

先介绍*args的使用。假设我们想把一个班级中每个同学的身高都变成以米为单位,即除以100:

def height(*args): data = args return data 
height() 

默认情况下函数收集到的是一个空元组:

()

height(178) 

当传入数据的时候,以元组的形式表示:

(178,)

height(178,189) 

(178, 189)

def height(*args): for data in args: # 对args中的元素进行循环操作 print("身高是: {}m".format(data / 100)) 
height(189,180,167,172) # 调用 

身高是: 1.89m
身高是: 1.8m
身高是: 1.67m
身高是: 1.72m

十二、进阶:**kwargs使用

**kwargs允许将不定长度的键值对,作为参数传递给一个函数

def information(**kwargs): data = kwargs print(data) 

默认情况下收集的是字典:

 information(name="Peter") 

{'name': 'Peter'}

information(name="Peter", age=23) 

{'name': 'Peter', 'age': 23}

def information(**kwargs): for k, v in kwargs.items(): print("{0} == {1}".format(k,v)) 
information(name="Peter") 

name == Peter

information(name="Peter", age=23) 

name == Peter
age == 23

information(name="Peter", age=23, height=175) 

name == Peter
age == 23
height == 175

十三、进阶:*args 和形参连用

提示: 本文由整理自网络,如有侵权请联系本站删除!
本站声明:
1、本站所有资源均来源于互联网,不保证100%完整、不提供任何技术支持;
2、本站所发布的文章以及附件仅限用于学习和研究目的;不得将用于商业或者非法用途;否则由此产生的法律后果,本站概不负责!

-六神源码网