《Python编程:从入门到实践(第二版)》自学笔记(十三)

定义函数

首先了解一下定义函数的格式是:def+函数名+括号+冒号

1
2
3
4
5
def greet_user(): 
"""显示简单的问候语。"""
print("Hello!")
greet_user()
输出:Hello!

紧跟在def greet_user( ):后面的所有缩进行构成了函数体,代码块的第二行文本是称为文档字符串的注释,描述了函数是做什么的。 文档字符串用三引号括起,Python使用它们来生成有关程序中函数的文档。代码行print(“Hello!”)是函数体内的唯一一行代码,因此greet_user( )只做一项工作:打印Hello!

由于这个函数不需要任何信息,调用它时只需输入greet_user( )即可,假设需要向此函数传参才能执行输出,可以在括号中进行添加

1
2
3
4
5
def greet_user(username):
"""显示简单的问候语。"""
print(f"Hello, {username.title()}!")
greet_user('jesse')
输出:Hello, Jesse!

仔细观察发现,一般来说我们所讲的传参,默认是实参,也就是函数在真正执行时,最终输出的,但是我们在定义函数的时候,括号中也有一个参数,这样的参数是形参。简单通俗一点来讲:形参就是一个影子,负责占坑,最终输出的是实参

位置实参,必定是跟顺序相关,具体的是指:实参的顺序和形参的顺序相同,要不然会出现信息关联不一致的问题

1
2
3
4
5
6
7
8
def describe_pet(animal_type, pet_name):
"""显示宠物的信息。"""
print(f"\nI have a {animal_type}.")
print(f"My {animal_type}'s name is {pet_name.title()}.")
describe_pet('hamster', 'harry')
输出:
I have a hamster.
My hamster's name is Harry.

在函数被定义后,我们可以多次的进行调用,次数不受任何限制

但是有时为了防止位置顺序没有按要求一一对应,那么还有一种补救,就是直接将实参和形参绑定在一起,写死,这样也可以,我们把这样方式称作为:关键字实参

1
2
3
4
5
6
7
8
9
10
def describe_pet(animal_type, pet_name):
"""显示宠物的信息。"""
print(f"\nI have a {animal_type}.")
print(f"My {animal_type}'s name is {pet_name.title()}.")
##从这里开始就是直接写死的情况,但最终达到的效果都是一样的
describe_pet(animal_type='hamster', pet_name='harry')
describe_pet(pet_name='harry', animal_type='hamster')
输出:
I have a hamster.
My hamster's name is harry.

与此同时,如果编写函数时,描述的是某一类的集合时,我们是可以给每个形参指定默认值

1
2
3
4
5
def describe_pet(pet_name, animal_type='dog'):
"""显示宠物的信息。"""
print(f"\nI have a {animal_type}.")
print(f"My {animal_type}'s name is {pet_name.title()}.")
describe_pet(pet_name='willie')

这里就是直接将动物的类型默认为是狗,如果不对animal_type进行传参的话,那输出默认的animal_type就是狗,但如果后续传参animal_type = ‘cat’,那此时以传参的为准,Python会将原先默认的animal_type忽略掉。

但由于我们在实际运用的过程中,会根据自身的习惯进行编码,所以也可能会混合使用,这也是等效的函数调用的好处

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2019-2024 Carrol Chen
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信