自定义函数_python3基础07函数(自定义)

"pythonic生物人"的第43篇分享1dabc8e52456c46acd335855a4f8644e.pngb67bdbfc13d9a2dfd40a928332a23310.pngb67bdbfc13d9a2dfd40a928332a23310.png

详细介绍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 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*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'] = first
    profile['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版)

同系列文章
python3基础04字典(dict)和集合(set)python3基础05布尔类型和比较运算符python3基础06流程控制语句

1dabc8e52456c46acd335855a4f8644e.png1dabc8e52456c46acd335855a4f8644e.png原创不易"点赞"、"在看"c119f0ab17118ec9e06bb46cfd6d4f77.png励下呗44acb983f4adc7711d1243dd1e79faed.pngc7c48c4a7abfa359670570871af50a74.png

1031b6e014e9d9f2a36941d0dd56287b.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

v-for中用elementUI实现分页

html 分页的内容 <el-aside style"width:49%;" v-for"(item, key, index) in AirInfor.slice((currentPage-1) * pagesize, currentPage * pagesize)" :key"index"><p style"margin-bottom: 10px;"><span>区域&a…

curl -windows下接口通讯

1&#xff0c;下载curl -----url命令传输工具2&#xff0c;配置curl环境变量3&#xff0c;在cmd环境中使用举例&#xff1a;curl -G http://xxxxxxx.com&#xff1f;参数使用&#xff1a;curl -G "www.baidu.com" 最原始的批量通讯返回可以将通讯命令保存为bat格式文…

centos7建站php_centos7搭建php服务器

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":6,"count":6}]},"card":[{"des":"云服务器 ECS(Elastic Compute Service)是一…

vue项目实现登录(sessionStorage 存储 token)

前提参考&#xff1a;vue项目封装axios 思路&#xff1a; // 1, 前端校验&#xff0c;校验成功后向后台传用户名和密码&#xff08;每次请求接口都要传 token&#xff09; // 2&#xff0c; 后端收到请求&#xff0c;验证用户名和密码&#xff0c;验证成功&#xff0c;生成 to…

sqlserver 存储过程 C#调用 实现从数据库Get数据

在最近的项目中我想建立一个EFDBfirst的模型但是失败了&#xff0c;生成的edmx中没有实体类和表结构&#xff0c;到处需求解决方案&#xff0c;未果。 问题请见&#xff1a;https://q.cnblogs.com/q/102743/ 后来使用本文写的这个方法 /// 1.在sqlserver中建立存储过程 在一个d…

TIBCO BusinessWorks 6和Container Edition与BW5的比较

[本文已于一段时间前发布在TIBCO博客上 。 我还在适当的地方添加了有关BusinessWorks Container Edition&#xff08;BW CE&#xff09;的一些信息。 下面定义的大多数特性对于BW6和BW CE均适用。 TIBCO ActiveMatrix BusinessWorks 6&#xff08;BW6&#xff09;是一个现代化…

修改jwt过期时间_PostgreSQL如何修改用户过期时间

生产环境中&#xff0c;有时候需要设置一个有时效的临时帐户&#xff0c;供一段时间内&#xff0c;某些需要的使用&#xff0c;过期帐号自己禁用&#xff0c;但有时候因为更多的需求&#xff0c;需要对这种有过期时间的帐号进行延长过期时间&#xff0c;这时候就需要使用命令行…

vue使用echarts图表

https://www.jianshu.com/p/2894b781063b 1、安装 npm install echarts // npm install echarts --save2、引入 echarts import * as echarts from echarts;3、写一个div容器用来承载图表: <div id"teamLeader"></div>4、写一个方法&#xff0c;&am…

云计算入门

根据美国国家标准与技术研究院定义&#xff1a;云计算是一种按使用量付费的模式&#xff0c;这种模式提供可用的、便捷的、按需的网络访问&#xff0c; 进入可配置的计算资源共享池&#xff08;资源包括网络&#xff0c;服务器&#xff0c;存储&#xff0c;应用软件&#xff0c…

20180105随笔

过滤器的执行过程&#xff1a;// 目标资源执行前执行chain.doFilter(request, response);// 目标资源执行后执行文件上传的前提&#xff1a;1.表单的method方法必须是post2.表单的enctype类型必须是&#xff1a;multipart/form-data3.表单中input的上传输入域为&#xff1a;<…

怎么自定义字体_自定义字体@fontface的常见应用

前言font-face允许网页自带字体&#xff0c;从而消除对用户电脑字体的依赖。基本用法如下&#xff1a;font-face { font-family: "family-name"; /* 字体名 */ src: url("family-name.eot"); /* IE9 */ src: url("family-name.eot?#iefix&q…

vue项目中使用mock(一)

一&#xff0c;安装 npm install mockjs --save-dev npm install json5 --save-dev npm install axios --save 二&#xff0c;每个文件内容 目录&#xff1a; 流程&#xff1a; Home.vue执行getUserInforList() 调用main.js中全局变量$api 调用/utils/api下的getUserInfo…

快速搭建redis单机版和redis集群版

单机版 第一步&#xff1a;需要安装redis所需的C语言环境&#xff0c;若虚拟机联网&#xff0c;则执行 yum install gcc-c 第二步&#xff1a;redis的源码包上传到linux系统 第三步&#xff1a;解压缩redis tar zxf redis的压缩文件 第四步&#xff1a;编译 &#xff0c;进入…

使用RxJava和Completable并行执行阻止任务

借助RxJava 1.1.1中引入的Completable抽象&#xff0c;如何并行执行阻止“仅副作用”&#xff08;也称为void&#xff09;任务的并行执行变得更加容易。 “ 正如您可能已经注意到&#xff0c;阅读我的博客时&#xff0c;我主要专注于软件Craft.io和自动代码测试。 但是&#x…

svn 回退到指定版本无法提交_SVN终端演练-版本回退

1. 版本回退概念以及原因?概念: 是指将代码(本地代码或者服务器代码), 回退到之前记录的某一特定版本原因: 如果代码做错了, 想返回之前某个状态重做;2. 修改了,但未提交的情况下, 回退代码方案1: (大力推荐)svn revert (作用:返回到上次提交后版本对应的最原始的状态)方案2: …

vue-awesome-swiper缩略图无法联动的问题

一&#xff0c;安装 npm install vue-awesome-swiper --save // npm install vue-awesome-swiper3.x --save我安装的版本是 “swiper”: “^6.6.1”, “vue-awesome-swiper”: “^3.1.3”, 在使用vue-awesome-swiper组件的时候&#xff0c;缩略图无法和大图实现联动&#xff…

个人博客13

今天的任务依旧为美化界面。 昨天的任务为美化界面。 遇到的问题为页面的布局&#xff0c;以及颜色的搭配。转载于:https://www.cnblogs.com/qilin20/p/8232942.html

tcp wireshark 过滤syn_使用 WireShark 分析 TCP/IP 三次握手 和 四次挥手

TCP 三次握手 示意图Wireshark 抓包注意事项为了演示一个TCP三次握手建立连接的过程&#xff0c;我们通过 Chrome 访问一个网页。已知 HTTP 协议就是建立在TCP链接上的通过 Cmd 的 ping 命令获取 这个网站对应的 IP地址 183.136.236.13确定 这个IP 有一个非常重要的好处&#x…

Python 基础函数

1.输入输出函数 input() 打印输出的内容后&#xff0c;接收输入用户输入的内容&#xff0c;默认为“字符串”类型 print() 打印输出的内容 2.类型转换函数 int() 转为整数 str() 转为字符串 3.类型判断函数 string.isdigit() 判断string是否为数字格式&#xff0c;返回布尔值 4…

Vue+Element导入导出Excel

一&#xff0c;安装 npm install -S file-saver xlsx npm install -D script-loader 二&#xff0c;导入Excel 1&#xff0c;Element 上传控件 <el-uploadaction"/":on-change"onChange":auto-upload"false":show-file-list"false&quo…