一、定义函数
使用关键字def定义函数。
def get_name():
"""打印名字"""
print("Hello")
get_name()
get_name为函数名,在get_name( ):后面的所有缩进行构成了函数体。而在上面代码中的第二行的文本是被称为文档字符串的注释,描述了函数使用来做什么的。
1. 向函数传递信息
可以在函数定义def get_name( )的括号内添加username,通过这里添加username,就可以让函数接受给函数指定的值。
def get_name(username):
"""打印名字"""
print(username)
get_name('jie')
2. 实参和形参
在函数中,定义函数时的参数为形参,调用函数的时候传递的参数为实参。如get_username的代码中,username为形参,而'jie'为实参。
二、传递实参
向函数传递实参的方式有很多种,可使用位置实参,这要求形参的顺序和实参的顺序相同;也可以使用关键字实参,其中每个实参都由变量名和值组成;还可使用列表和字典。
1. 位置实参
def get_name(first, last):
"""打印姓名"""
firstname = first
lastname = last
print(firstname + " " + lastname)
get_name("bill", "su")
位置实参的顺序很重要,如果位置实参的顺序到了,在函数中的形参的值也会颠倒。
2. 默认值
在编写函数的时候,可以给每一个形参一个默认值。在调用函数时,如果给形参提供了实参,则将使用指定的实参值,否则,就使用形参的默认值。
def get_name(username = 'Tom'):
"""打印名字"""
print(username)
get_name()
三、返回值
函数可以处理一些数据,并返回一个或一组值。函数返回的值被称为返回值。在函数中,可使用==return==语句将值返回到调用函数的代码行
1. 返回简单值
def get_name(first, last):
"""打印名字"""
firstname = first
lastname = last
full_name = firstname + " " + lastname
return full_name
full_name = get_name('bill', 'su')
print(full_name)
2. 让实参变成可选的
有时候,需要让实参变成可选的,这样使用函数的人就只需要在必要时才提供额外的信息。可使用默认值来让实参变成可选的。
def get_name(first, last = ''):
if last:
print(first + last)
else:
print(first)
get_name('bill')
3. 返回字典
函数可返回任何类型的值,包括列表和字典等较复杂的数据结构。
def get_name(first, last):
person = {'first': first, 'last': last}
return person
musician = get_name('jim', 'hen')
print(musician)
四、传递列表
函数可以传递列表,这种列表可以包含的可能是名字、数字或更复杂的对象(如字典)。将列表传递给函数后,函数就能直接访问其内容。
def greet_name(names):
for name in names:
msg = "Hello" + " " + name.title() + "!"
print(msg)
user_names = ['han', 'ty', 'jim']
greet_name(user_names)
1. 在函数中修改列表
将列表传递给函数后,函数就可以对其进行修改。在函数中对这个列表所做的任何修改都是永久性的。
def del_name(names):
names.pop()
names = ['han', 'ty', 'jim']
del_name(names)
print(names)
2. 禁止函数修改列表
可以向函数传递列表的副本而不是元件,这样函数所做的任何修改都只影响副本。
def del_name(names):
names.pop()
print("修改后的列表副本:")
print(names)
names = ['han', 'ty', 'jim']
del_name(names[:])
print("调用函数后的列表:")
print(names)
五、传递任意数量的实参
下面的函数只有一个形参*names,但不管调用语句提供了多少实参,这个形参都将它们统统纳入囊中。
def names(*names):
print(names)
names('jim')
names('jim', 'make', 'len')
形参名*names 中的星号让Python创建一个名为names的空元组,并将收到的所有值都封装到这个元组中。函数体内的print语句通过生成输出来证明Python能够处理使用一个值调用函数的情形,也能处理使用三个值来调用函数的情形。
1. 结合使用位置实参和任意数量的实参
如果让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。Python先匹配位置实参和关键字实参,再将余下的实参收集到最后一个形参中。
def make_pizza(size, *toppings):
print("\nmakeing a"+ str(size) +
"-inch pizza with the folling topping")
for topping in toppings:
print("-"+ topping)
make_pizza(16, 'peppersion')
make_pizza(12, 'pepper', 'green peppers')
3. 使用任意数量的关键字实参
有时候,需要接受任意数量的实参,但预先不知道传递给函数的会是什么样的信息。在这种情况下,可将函数编写成能够接受任意数量的键-值对——调用语句提供了多少就接受多少。
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_profile = build_profile('albert', 'jim',
location='princetion',
field='physics')
print(user_profile)
形参**user_info中的两个星号让Python创建一个名为profile的空字典,用于存储用户简介。
六、将函数存储在模块中
函数的优点之一是:使用它们可将代码块与主程序分离。通过给函数指定描述性名称,可让主程序容易理解的多。还可以更进一步,将函数文件存储在被称为模块的独立文件中,再将模块倒入到主程序中。import语句允许在当前运行的程序文件中使用模块中的代码。
通过将函数存储在独立的文件中,可隐藏程序代码的细节,将重点放在程序的高层逻辑上。这能够在众多的程序中重用函数。将函数存储在独立文件中后,可与其它程序员共享这些文件而不是整个程序,
1. 导入整个模块
要让函数是可导入的,得先创建模块。模块是扩展名为.py的文件,包含要导入到程序中的代码。
pizza.py
def make_pizza(size, *toppings):
print("\nmakeing a"+ str(size) +
"-inch pizza with the folling topping")
for topping in toppings:
print("-"+ topping)
making_pizzas.py
import pizza
pizza.make_pizza(16, 'peppersion')
pizza.make_pizza(12, 'pepper', 'green peppers')
2. 导入特定的函数
还可以导入模块中的特定函数:
from pizza import makez_pizza
通过用逗号分隔函数名,可根据需要从模块中导入任意数量的函数
from module_name import function_0, function_1, function_2
3. 使用as给函数指定别名
如果要导入的函数的名称可能与程序中现有的名称冲突,或者函数的名称太长,可指定简短二独一无二的别名——函数的另一个名称,类似于外号。
from pizza import make_pizza as mp
mp(16, 'peppersion')
mp(12, 'pepper', 'green peppers')
4. 使用as给模块指定别名
import pizza as p
p.make_pizza(16, 'peppersion')
p.make_pizza(12, 'pepper', 'green peppers')
5. 导入函数中的所有函数
import语句中的星号让Python将模块pizza中每个函数都复制到这个程序文件中。由于导入了每个函数,可通过名称来调用每个函数与,而无需使用句点表示法。
from pizza import *
make_pizza(16, 'peppersion')
make_pizza(12, 'pepper', 'green peppers')
网友评论