《Python编程:从入门到实践》第八章笔记

本文深入讲解Python函数的定义与调用,包括位置实参、关键字实参、默认值、返回值、列表操作、任意数量实参及模块导入等内容,帮助读者全面掌握Python函数的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

8.1 定义函数

定义一个简单函数:

def greet_user():
	"""显示简单的问候语"""
	print("Hello!")

调用greet_user()函数:

>>> greet_user()
Hello!

8.1.1 向函数传递信息

稍作修改,让函数用用户的名字做抬头,向greet_user()函数传递一个字符串参数:

>>> def greet_user(username):
...    print("Hello,"+username.title()+"!")
...
>>> greet_user("jiayu")
Hello,Jiayu!

8.1.2 实参和形参

在函数greet_user()的定义中,变量username是一个形参——函数完成其工作时所需的一项信息。在代码greet_user("jiayu")中,值”jiayu“是一个实参,实参是调用函数时传递给函数的信息。调用函数时,将实参”jiayu“传递给函数greet_user(),这个值被存储在形参username中。

8.2 传递实参

向函数传递实参的方式很多,可使用位置实参,要求实参的顺序与形参的顺序相同;也可使用关键字实参,其中每个实参都由变量名和值组成;还可以使用列表和字典

8.2.1 位置实参

调用函数时,将函数调用的每个实参都关联到函数定义中的一个形参,最简单的关联方式是基于实参的顺序,称为位置实参

>>> def describe_pet(animal_type,pet_name):
...    print("\nI have a" + animal_type + ".")
...    print("The name is " + pet_name.title() + ".")
...
>>> describe_pet("dog","jack")

I have adog.
The name is Jack.

8.2.2 关键字实参

关键字实参是传递给函数的名称-值对,直接在实参中将名称和值关联起来了。关键字实参无需考虑函数调用中的实参顺序,还清楚地指出了函数调用中各个值的用途。

>>> describe_pet(pet_name = "jack",animal_type = "dog")

I have adog.
The name is Jack.

8.2.3 默认值

编写函数时,可给每个形参指定默认值,使用默认值可简化函数调用。

>>> def descirbe_pet(pet_name,animal_type = "dog"):
...    print("\nI have a" + animal_type + ".")
...    print("The name is " + pet_name.title() + ".")

>>> descirbe_pet("Mary")

I have adog.
The name is Mary.
>>> descirbe_pet("Mary","cat")

I have acat.
The name is Mary.

8.2.4 等效的函数调用

指定实参时,可以使用位置方式,也可以使用关键字方式。

8.2.5 避免实参错误

>>> describe_pet("dog")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: describe_pet() missing 1 required positional argument: 'pet_name'

8.3 返回值

8.3.1 返回简单值

>>> def add(a,b):
...    return a+b
...
>>> add(3,5)
8

8.3.2 让实参变成可选的

为了给用户提供灵活的选项,可以给某个实参设置默认值,用户觉得必要时才输入。

8.3.3 返回字典

函数可返回任何类型的值,包括列表和字典等教复杂的数据结构。

>>> def build_person(first_name,last_name):
...    person = {'first':first_name,'last':last_name}
...    return person
...
>>> you = build_person("karty","sun")
>>> you
{'first': 'karty', 'last': 'sun'}

8.3.4 结合使用函数和While循环

略。

8.4 传递列表

>>> def greet_users(names):
...    for name in names:
...       msg = "Hello, " + name.title() + "!"
...       print(msg)
...
>>> greet_users(usernames)
Hello, H!
Hello, E!
Hello, L!

8.4.1 在函数中修改列表

>>> def delete_one(arr):
...    while 1 in arr:
...       arr.remove(1)
...
>>> arr = [1,1,2,3,1]
>>> delete_one(arr)
>>> arr
[2, 3]

8.4.2 防止函数修改列表

为防止函数修改原有列表,可将列表的副本传递给函数。

>>> delete_one(arr[:])

8.5 传递任意数量的实参

>>> def make_pizza(*toppings):
...    for item in toppings:
...       print(item)
...
>>> make_pizza("one")
one
>>> make_pizza("one","two","three")
one
two
three

8.5.1 结合使用位置实参和任意数量实参

必须将函数中接纳任意数量实参的形参放在最后,Python先匹配位置实参和关键字实参,再将其余的实参都收集到最后一个形参中。

8.5.2 使用任意数量的关键字实参

>>> def build_profile(first,last,**user_info):
...     profile = {}
...     profile['first_name'] = first
...     profile['last_name'] = last
...     for key,value in user_info.items():
...        profile[key] = value
...     return profile
...
>>> user = build_profile("jiayu","zhang",age = 24,sex = "male")
>>> user
{'first_name': 'jiayu', 'last_name': 'zhang', 'age': 24, 'sex': 'male'}

8.6 将函数存储在模块中

可将函数存储在被称为模块的独立文件中,再将模块导入到主程序中,import语句允许在当前运行的程序文件中使用模块中的代码。

8.6.1 导入整个模块

模块是扩展名为.py的文件,创建文件名为pizza.py的模块,里面只有函数make_pizza()。在pizza.py所在的目录中创建另外一个文件,导入模块:

import pizza
pizza.make_pizza()

8.6.2 导入特定的函数

导入模块中的特定函数,语法是:

from module_name import function_0,function_1,function_2

8.6.3 使用as给函数指定别名

from pizza import make_pizza as mp
mp()

8.6.4 使用as给模块指定别名

import pizza as p
p.make_pizza()

8.6.5 导入模块中的所有函数

from pizza import *
make_pizza()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值