详解Python模块化编程-自定义函数
本文目录
0、楔子
1、自定义函数格式
2、编写函数说明文档
3、函数参数函数形参和实参区别位置实参关键字实参默认实参让实参可选传递任意数量的实参结合使用位置实参和任意数量实参使用任意数量的关键字实参
4、函数返回值将函数存储在模块中并导入新程序中
正文开始啦
0、楔子
函数可以理解为多条语句整合而成的代码块,指定特定的名称, 用于实现具体的功能。函数可以实现代码更好的复用,是结构化编程的核心。例如,已知圆的半径r求圆的面积,可以通过如下代码解决。
import math
r = 3
S = math.pi*r*r
print(S)
28.274333882308138
但是,当需要求多个圆的面积时,反复写上面代码就显得很繁琐,这时可以定义一个求圆面积的函数s_circle,每次只需传入不同圆的半径,即可计算不同圆面积。
def s_circle(r):S = math.pi*r*rreturn S
print(s_circle(3))
print(s_circle(333))
28.274333882308138
348368.06776391855
1、 自定义函数格式
格式如下:
def fun_name(args):fun_bodyreturn xxfun_name,自定义的函数名;
args,传入函数的参数;
fun_body,函数体,即函数想实现的功能;
return xx,return结束函数,函数返回值 xx,不指定则返回None。
举个栗子,定义一个计算圆面积的函数:
def s_circle(r):#自定义函数s_circle,传入的参数r。S = math.pi*r*r#函数体return S #返回圆的面积S
print(s_circle(3))#函数名()调用函数,括号内为传入
28.274333882308138
当函数体只有一行时,可以置于def语句同一行。
def for_multi(x,y): print(x*y)#函数定义
for_multi(10,12)#调用函数
120
2、编写函数说明文档
说明文档置于函数开头处,作为函数的一部分存储起来,通过函数名.__doc__可查看说明文档。
def s_circle(r):"compute the circular area with radius"#函数说明文档内容S = math.pi*r*rreturn S
s_circle.__doc__#函数__doc__属性存储函数说明文档
'compute the circular area with radius'
3、函数参数
形参和实参区别
形参:定义函数时,函数名称后面括号里的内容为形参;
实参:调用函数时,括号里的内容为实参。
def hello2sb(sb):#括号内为传入的参数,此处sb为形参。print("Hello %s!"%sb.title())
hello2sb("jack") #此处jack为调用hello2sb的实参,是调用函数时传递给函数的信息。
Hello Jack!
位置实参
调用函数时按照形参的顺序关联实参。
def des_sb(name,provice):"""describe sb"""print("%s comes from %s."%(name.title(),provice.title()))
#title函数返回标题化字符,单词的开头为大写,其余为小写
des_sb("cao","anhui")
Cao comes from Anhui.
关键字实参
形参=实参传递参数,无需考虑实参顺序。
def des_sb(name,provice):"""describe sb"""print("%s comes from %s."%(name.title(),provice.title()))
#无需考虑输入实参顺序,以下两种输出一样
des_sb(name = "cao",provice = "anhui")
des_sb(provice = "anhui",name = "cao")#颠倒实参顺序
Cao comes from Anhui.
Cao comes from Anhui.
默认实参
定义函数时,给形参一个默认值,调用函数时若提供了实参则使用提供值,否则使用默认值。
def des_sb(name,provice,dynasty="Three Kingdoms Era"):#定义时形参dynasty指定默认值"""describe sb"""print("%s comes from %s of %s."%(name.title(),provice.title(),dynasty))
des_sb(name = "cao",provice = "anhui")#形参此处未指定实参,调用默认值
des_sb(name = "cao",provice = "anhui",dynasty = "Qin")#dynasty指定实参,使用实参
Cao comes from Anhui of Three Kingdoms Era.
Cao comes from Anhui of Qin.
**注意:**以上三种参数传递方式可以混用,自己最容易理解的调用方式即可。
让实参可选
指定形参默认值为空字符串,放到所有形参最后,则该形参可空(可以提供实参也可以不用)。
def return_fullname(firstname,lastname,middlename=""):"""Show fullname"""if middlename:fullname = " ".join((middlename.title()+""+lastname,firstname.title()))else:fullname = " ".join((lastname.title(),firstname.title()))return fullname#返回fullname
#调用函数
fullname = return_fullname(firstname = "cao",lastname = "cao")#middlename形参为空
fullname1 = return_fullname(firstname = "cao",middlename = "meng",lastname = "de")
print(fullname)
print(fullname1)
Cao Cao
Mengde Cao
传递任意数量的实参
定义函数时使用:*形参名称。
def known_tangera(*heros):#星号(*)使得Python将所有实参存入heros元组中"""show known heros in tang"""print(heros)
known_tangera("yuanba li","shiming li")
known_tangera("yuanba li","shiming li","cheng nuo")
('yuba li', 'shiming li')
('yuba li', 'shiming li', 'cheng nuo')
结合使用位置实参和任意数量实参
在函数定义中将接纳任意数量实参的形参(*形参名)放在最后.。
def make_pizza(size, *toppings):"""概述要制作的比萨"""print("\nMaking a " + str(size) + "-inch pizza with the following toppings:")for topping in toppings:#toppings元组存储任意数量的实参print("- " + topping)
make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
Making a 16-inch pizza with the following toppings:
- pepperoni
Making a 12-inch pizza with the following toppings:
- mushrooms -
- green peppers
- extra cheese
使用任意数量的关键字实参
定义函数时使用:**形参名称。
def build_profile(first, last, **user_info):#形参**user_info 中的两个星号让Python创建一个名为user_info 的空字典, #并将收到的所有名称—值对都封装到这个字典中。"""创建一个字典, 其中包含我们知道的有关用户的一切"""profile = {}profile['first_name'] = firstprofile['last_name'] = lastfor key, value in user_info.items():profile[key] = valuereturn profile
#传递
user_profile = build_profile('albert', 'einstein',location='princeton',field='physics')
print(user_profile)
{'first_name': 'albert', 'last_name': 'einstein', 'location': 'princeton', 'field': 'physics'}
4、函数返回值
在函数中, 可使用return 语句将值返回到调用函数的代码行。
将函数存储在模块中并导入新程序中
将函数存储在被称为模块的独立文件(模块可以理解为以.py结尾的文件)中,再将模块导入到主程序中。import 语句允许在当前运行的程序文件中使用模块中的代码。导入模块的方法有多种, 下面对每种都作简要的介绍
导入整个模块
下面创建pizza模块,pizza.py:
def make_pizza(size, *toppings):"""概述要制作的比萨"""print("\nMaking a " + str(size) +"-inch pizza with the following toppings:")for topping in toppings:print("- " + topping)
在pizza.py所在的目录中创建另一个名为making_pizzas.py的模块:
import pizza#导入pizza模块
#让Python打开文件pizza.py,并将其中的所有函数都复制到这个程序中。
#本程序可以使用pizza.py中定义的所有函数。
pizza.make_pizza(16, 'pepperoni')#调用pizza模块中make_pizza函数
pizza.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
Making a 16-inch pizza with the following toppings:
- pepperoni
Making a 12-inch pizza with the following toppings:
- mushrooms
- green peppers
- extra cheese
导入模块特定的函数
#从module_name模块中导入任意数量函数,函数之间逗号分割。
from module_name import function_0, function_1, function_2
making_pizzas.py
from pizza import make_pizza#只导入pizza模块中的make_pizza函数
make_pizza(16, 'pepperoni')#调用pizza模块中make_pizza函数
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
导入模块中的所有函数
使用星号(* ) 运算符可让Python导入模块中的所有函数。
from pizza import *#导入pizza模块所有函数
make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
使用as 给函数指定别名
from pizza import make_pizza as mp#函数别名mp
mp(16, 'pepperoni')
mp(12, 'mushrooms', 'green peppers', 'extra cheese')
使用as 给模块指定别名
import pizza as p#模块别名p
p.make_pizza(16, 'pepperoni')
p.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese'
参考:Python编程:从入门到实践Python基础教程(第3版)
END
各位伙伴们好,詹帅本帅搭建了一个个人博客和小程序,汇集各种干货和资源,也方便大家阅读,感兴趣的小伙伴请移步小程序体验一下哦!(欢迎提建议)
推荐阅读
牛逼!Python常用数据类型的基本操作(长文系列第①篇)
牛逼!Python的判断、循环和各种表达式(长文系列第②篇)
牛逼!Python函数和文件操作(长文系列第③篇)
牛逼!Python错误、异常和模块(长文系列第④篇)
详解Python模块化编程-自定义函数相关推荐
- python import io_详解Python IO编程
文件读写 读文件 try: # windows下utf8 f = open('./README.md', 'r', encoding='utf8', errors='ignore') print(f. ...
- python join_详解Python中的join()函数的用法
函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符) ...
- python中index函数_详解python中的index函数用法
1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...
- python udp编程_详解python UDP 编程
前面我们讲了 TCP 编程,我们知道 TCP 可以建立可靠连接,并且通信双方都可以以流的形式发送数据.本文我们再来介绍另一个常用的协议–UDP.相对TCP,UDP则是面向无连接的协议. UDP 协议 ...
- 详解Python模块化——模块(Modules)和包(Packages)
文章目录 引言 Python Modules模块 导入模块 ①导入整个模块 ②导入模块中的特定函数 ③导入模块中的所有函数 给导入的模块一个别名 单独运行模块 加速模块加载 Python Packag ...
- python中怎么做分组问题_详解Python中的分组函数groupby和itertools)
具体代码如下所示: from operator import itemgetter #itemgetter用来去dict中的key,省去了使用lambda函数 from itertools impor ...
- python中index方法详解_详解python中的index函数用法
1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...
- 【Kay】详解Python中的random()函数
1.python中的random函数 random() 方法返回随机生成[0,1)范围内的一个实数 randint(a,b)方法随机生成a到b范围内的一个整数 randrange(a,b,c)方法生成 ...
- 详解python中的lambda函数
什么是lambda? lambda是Python中预留的一个关键词,当我们需要一个函数,而又不想重新去为函数命名时,我们就可以使用lambda关键词来简单的去定义一个函数,也就是所谓的匿名函数,它在我 ...
最新文章
- oracle 如何预估将要创建的索引的大小
- IOS NSString 操作
- ccna学习笔记之五:路由器密码恢复
- 判断一个点是否在矩形内部_高速公路专用矩形泄水管特点及安装注意事项
- (Android开发辅助工具)动态广播注册解注工具
- 防火墙迁移:提高安全弹性与可用性的5种方
- 盐城有哪些中专计算机学校,盐城有什么中专学校
- 随机事件、随机变量、概率、概率密度函数
- 模拟处理机作业调度---短作业优先调度算法
- exfat最佳单元大小_ICLR2019最佳论文!神经网络子网络压缩10倍,精确度还能保持不变...
- 武汉理工大学计算机专业课程表,武汉理工大学2014年春季第一周课表.xls
- 【DIY】用驱蚊器改装wifi中继器,wifi信号增强器
- 网络科学论坛纪要-2012
- 【LeetCode】1056. Confusing Number 解题报告(C++)
- 作为硅谷大佬,大战周鸿祎是怎样的一种体验?|独家采访
- WPA3功能开发及验证
- 墙裂推荐,Python开发者不容错过的7个VS Code扩展
- [ICCV2021]Learning to Stylize Novel Views
- 大佬们的“受锤”往事
- SQL报错Every derived table must have its own alias
热门文章
- boosting家族之综合理论篇
- Nginx反向代理,负载均衡,redis session共享,keepalived高可用
- 三分钟玩转jQuery.noConflict()
- promise使用promise进行封装拉起微信支付
- jQuery的进行解决layui闪退的问题
- Vue报错bash: vue: command not found或者vue ui没有反应:官方修改成新的命令了
- PHP实现弹出消息提示框的两种方法
- rabbitmq安装与配置(windows)亲测有效!!!
- matlab 主成分 分类,matlab主成分分析
- 树莓派运行python import os未找到命令_通过pip指令在树莓派上基于Python3安装OpenCV...