萌新向Python数据分析及数据挖掘 第一章 Python基础 第八节 函数

第一章 Python基础

第八节 函数

定义函数

函数 其实就可以理解为外挂,把一些常用的、重复率比较多你又不想重复写的东西写进函数,加上开关实现简化操作

举个简单的例子

1 def greet_user(username):
2     #定义一个叫做“迎接用户”的外挂,让他能直接打印一个问候语,括号里面是函数需要输入的东西,也就是个性化的东西
3     """先是简单的问候语"""
4     print("Hello! " + username.title() + "!")# 打印hello!+ 用户输入的用户名的首字母大写形式
5 greet_user("mike") #mike使用外挂 一次
View Code
 

由上所示,关键字def定义一个函数,后面跟着函数名以及用来输入参数的括号,定义以冒号结束,而print("Hello!")为其函数体。

调用函数时,则依次指定函数名以及用括号括起的必要信息,如参数等。

实参和形参

在函数greet_user(username)的定义中,变量username是一个形参。形参是一个函数完成其工作所需的一个参数。

在代码greet_user("mike")中,值"mike"是一个实参。实参是调用函数时传递给函数的参数。

调用greet_user("mike")函数时,我们将实参"mike"传递给了函数greet_user(),这个值被存储在形参username。

传递实参

位置实参:调用函数时,必须将函数调用中的每个实参都采用基于实参顺序的方式关联到函数定义中的一个形参中。

关键字实参:调用函数时,直接传递给函数名称-值对。此时不用考虑实参顺序。

 

默认值:给形参指定默认值。在调用函数中给形参提供了实参时,则用指定的实参值。如果没有提供则使用形参默认值。

PS:使用默认值时,在形参列表中必须列出没有默认值的形参,再列出有默认值的实参。才能让python正确解读位置实参。

 

返回值

返回简单值


 
1 def get_formatted_name(first_name, last_name):#输入姓和名
2     full_name = first_name + ' ' + last_name# 拼接
3     return full_name.title()#返回拼接后的首字母大写形式
4 musician = get_formatted_name('jimi', 'hendrix')
5 print(musician)
View Code

我们可以使用return语句在函数中返回值。

让实参可选

 1 def get_formatted_name(first_name, last_name, middle_name=''): 
 2     #当有参数可有可无的时候,可以给他一个默认值,如果用户没有输入就用默认值
 3     if middle_name:#如果有输入默认值,则三个拼接
 4         full_name = first_name + ' ' + middle_name + ' ' + last_name
 5     else: #如果没有输入默认值,则姓名拼接
 6         full_name = first_name + ' ' + last_name
 7     return full_name.title()
 8 musician = get_formatted_name('jimi', 'hendrix')
 9 print(musician)
10 musician = get_formatted_name('john', 'hooker', 'lee')
11 print(musician)
View Code
 

如上所示,使用if条件语句,并将实参作为判断条件即可让实参可选。

传递列表

将列表传递给函数后,不仅可以遍历列表,还能修改列表,并且这种修改时永久性的。 如果要禁止函数修改列表,可以传递列表的副本,比如:function_name(list_name[:])

传递任意数量的实参

1 def make_pizza(*toppings):#用户可以输入多个pizza配料,但都是属于披萨配料,一起作为一个元组被函数使用
2     print(toppings)
3 make_pizza('pepperoni')
4 make_pizza('mushrooms', 'green peppers', 'extra cheese')
View Code
形参名 *toppings中的 星号表示创建一个名为 toppings 的 空元组,并把所有收到的值封装在这个元组中。我们还可以使用循环语句将所有值打印出来。

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

如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量的实参的形参放在最后。这样,python会先匹配位置实参和关键字实参,并把余下的实参都收集到最后一个形参中。

 

1 def make_pizza(size, *toppings):#做披萨程序,输入尺寸和配料(可多种)
2     print("\nMaking a " + str(size) + "-inch pizza with the following toppings:")
3     for topping in toppings: #把所有的配料打印出来
4         print("- " + topping)
5 make_pizza(16, 'pepperoni')
6 make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
View Code
 

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

 1 def build_profile(first, last, **user_info):#建档程序,需要输入姓、名、和用户信息(字典)
 2     profile = {}#建立一个空字典
 3     profile['first_name'] = first #用'first_name'标签存放用户输入的名
 4     profile['last_name'] = last#用'last_name'标签存放用户输入的姓
 5     for key, value in user_info.items():
 6         #把用户输入的字典形式的用户信息照抄,
 7         #这里 如果用户信息里面有一个键值对和'first_name'或'last_name'一样,
 8         #那么,用户资料里的姓名将被替代,大家可以尝试一下
 9         profile[key] = value
10     return profile
11  
12 user_profile_1 = build_profile('albert', 'einstein',location='princeton',field='physics')
13 user_profile_2 = build_profile('albert', 'einstein',first_name='princeton',field='physics')
14 print(user_profile_1)
15 print(user_profile_2)
View Code
 

形参**user_info中的两个星号表示创建一个名为user_info的空字典,并将收到的所有名称-值对都封装到这个字典中。

将函数存储在模块中

导入整个模块

模块时扩展名为.py的文件,包含要导入到程序中的代码。使用import语句可以将模块导入。把文件放在同一个文件夹里面最方便。

#pizza.py
 
1 def make_pizza(size, *toppings): #做披萨程序,输入尺寸和配料(可多种)
2     print("\nMaking a " + str(size) +"-inch pizza with the following toppings:")
3     for topping in toppings:
4         print("- " + topping)
View Code

 
 
 
#making_pizzas.py
1 import pizza #导入pizza模块(已经写好的外挂)
2 pizza.make_pizza(16, 'pepperoni') #导入后直接使用
3 pizza.make_pizza(12,'mushrooms', 'green peppers', 'extra cheese')
View Code
 

如果导入的是整个模块,调用的时候就要指定模块名:module_name.function_name()

导入特定的函数

导入模块中特定的函数,可以使用:from module_name import function_name

用逗号分隔函数名,可导入任意数量函数:from module_name import function_0, function_1, function_2

这时候调用函数,无需使用句点,直接指定函数名,因为我们在import语句中显示导入了函数。

使用as给函数指定别名

为了防止冲突,或者函数名太长,可指定一个独一无二的别名,函数的另外一个名称,通用语法为:from module_name import function_name as fn

导入模块中的所有函数

使用星号(*)运算符可以导入模块中的所有函数,此时不用使用句点来调用函数。不过最好不要这样。语法为:from module_name import *

猜你喜欢

转载自www.cnblogs.com/romannista/p/10325289.html