首页 > 行业资讯 > 详解Python模块化编程-自定义函数

详解Python模块化编程-自定义函数

时间:2022-03-08 来源: 浏览:

详解Python模块化编程-自定义函数

小詹学Python
小詹学Python

xiaozhan_Python

一个有温度的 Python 订阅号!

收录于话题

以下文章来源于pythonic生物人 ,作者pythonic生物人

pythonic生物人 .

分享数据科学干货(涉及Python/R/统计等)

本文目录

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*r      return  S print(s_circle( 3 )) print(s_circle( 333 ))

28.274333882308138

348368.06776391855


1、 自定义函数格式

格式如下:

def   fun_name (args) :     fun_body      return  xx fun_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*r      return  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( " Making 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’ ] = first     profile[ ’last_name’ ] = last      for  key, value  in  user_info.items():         profile[key] = value      return  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( " Making 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错误、异常和模块(长文系列第④篇)

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐