自定义函数_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,一经查实,立即删除!

相关文章

curl -windows下接口通讯

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

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

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

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

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

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

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

vue项目中使用mock(一)

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

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

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

javafx 使用_使用JavaFX AnimationTimer

javafx 使用回想一下,给AnimationTimer起个名字可能不是一个好主意,因为它不仅可以用于动画,还可以用于测量fps速率,碰撞检测,模拟步骤,游戏主循环等。实际上,我大部分时间都在看AnimationTimer…

.Net Core 简洁架构事件(这个不完整,待仔细补充)

.Net Core的架构 - 根据微软官方文档 微软给出了.Net Core的架构方法,无论是在web,azure,uwp等等 微软的github地址:https://github.com/dotnet-architecture/eShopOnWeb 转载于:https://www.cnblogs.com/bijinshan/p/8250512.htm…

原理图中如何连线_Altium Designer10绘制原理图

在进行原理图绘制之前,应先将原理图库与PCB库相关联,在原理图绘制完成后,在生成PCB图,如何将原理图库与PCB库相关联?先进入原理图库,如下图所示。双击元器件文件,进行元器件配置。 元器件配置界面如下图所示。选择Add...进行添加对应的PCB库。 选择浏览进行查找相关PCB库…

NetBeans Java EE技巧3:数据库中的RESTful Web服务

许多现代的Web应用程序正朝着使用HTTP使用无状态通信的方向发展。 REST(代表性状态转移)体系结构样式通常用于设计网络应用程序,而使用Java EE 7,很容易开发用于数据库通信的RESTful后端。 使用简单的POJO(普通的Java旧…

参数php_PHP多参数方法的重构

php中文网最新课程每日17点准时技术干货分享假设我们要完成一个保存文章的功能&#xff0c;如果采用函数编程的方式&#xff0c;大概会是下面这个样子&#xff1a;<?php function saveArticle($title, $content, $categoryId){ // ...}?>每个参数代表一个属性&#…

k8s集群部署成功后某个节点突然出现notready状态的问题原因分析和解决办法

文章目录 1、问题描述2、查看node03的日志3、错误原因分析4、解决办法 1、问题描述 k8s集群配置为 一主三个节点&#xff1b;刚开始运行一直正常&#xff1b;某天突然node03主机状态变为notready&#xff0c;问题如下&#xff1a; 在master节点使用&#xff1a; #master节点…

kickstart_具有Java Kickstart的MongoDB

kickstartNoSQL数据库由于其可伸缩性而变得越来越流行。 适当使用时 NoSQL数据库可以提供真正的好处。 MongoDB是使用C 编写的高度可扩展的开源NoSQL数据库。 1.安装MongoDB 您可以按照所使用的操作系统&#xff0c;按照MongoDB官方网站上的说明安装MongoDB&#xff0c;而不会…

DataGuard之DG环境搭建

DG 环境搭建 1.设置归档模式 DG环境的搭建必须要把数据库启动到归档模式&#xff0c;并且为了避免开发人员使用nologging语句&#xff0c;我们还要把数据库设置为force logging。 查看数据库是否运行在归档模式&#xff1a; #su - oracle $sqlplus / as sysdba SQL>archive…

a算法解决八数码问题_javascript,八皇后问题解决

八皇后问题 八皇后问题&#xff0c;是一个古老而著名的问题&#xff0c;是回溯算法的典型案例。 该问题是国际西洋棋棋手马克斯贝瑟尔于1848年提出&#xff1a; 在88格的国际象棋上摆放八个皇后&#xff0c;使其不能互相攻击&#xff0c; 即&#xff1a;任意两个皇后都不能处于…

CentOS6.9部署zabbix3.0监控系统

环境&#xff1a; [rootredis ~]# uname -a Linux redis 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux [rootredis ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [rootredis ~]# getenforce Disabled [rootredis …

输出整形变量语句_Python合集之Python变量

在上一节的合集中&#xff0c;我们了解了Python的保留字与标识符&#xff0c;本节我们将进一步了解一下Python中关于变量的问题。变量严格意义上来讲应该称之为“名称”&#xff0c;也可以理解为标签。在Python中&#xff0c;不需要先声明变量名及其数据类型&#xff0c;直接赋…

activemq 连接_ActiveMQ网络连接器

activemq 连接这篇文章对我以及对ActiveMQ的网络连接器的工作方式可能感兴趣的任何ActiveMQ贡献者都适用。 我最近花了一些时间查看代码&#xff0c;并认为最好画一些快速的图表来帮助我记住我学到的知识&#xff0c;并在将来发现问题时帮助将来确定在哪里进行调试。 如果我输入…

如何让fragment刷新界面_快速实现android版抖音主界面的心得

原文作者&#xff1a;DK_BurNIng如何快速确定竞品某个界面的实现方式&#xff1f;当你收到产品一个需求是模仿某个竞品且时间很短没有过多时间给你调研技术方案的时候&#xff0c;如何尽快确定这个功能的技术方案呢&#xff1f; 这里我给出我自己的一个小窍门&#xff0c;可以避…

使用JBoss Cool Store的终极云零售指南

我们一直在讨论为什么应用程序开发人员在App Dev Cloud Stack系列中不能再忽略其堆栈了。 带有JBoss Cool Store的App Dev Cloud 我们从头到尾讨论了各个层&#xff0c;但尚未为您提供除Red Hat Container Development Kit&#xff08;CDK&#xff09;之外的任何应用程序开发…