python功能函数_Python-功能函数的使用

Python中的函数提供了有组织的,可重用的代码来执行一组操作。函数简化了编码过程,防止冗余逻辑,并使代码更容易遵循。

定义和调用简单函数

使用def语句来定义Python中的函数最常见的方式。这种说法是所谓的单条复合语句的语法如下:

deffunction_name(parameters):

statement(s)

function_name被称为标识符的功能。由于函数定义是一个可执行语句其执行绑定功能名称可以在以后使用的标识符被称为函数对象。

parameters是一个可选的标识符列表,绑定到调用函数时作为参数提供的值。函数可以具有任意数量的参数,这些参数由逗号分隔。

statement(s)-也被称为函数体-是每个函数被调用时执行的语句的一个非空序列。这意味着一个函数体不能为空。

这里有一个简单的函数定义,目的是打印的一个例子Hello每次被称为时间:

defgreet():print("Hello")

现在,让我们把定义的greet()函数:

greet()#Out: Hello

这是一个函数定义的另一个例子,它接受一个参数,并在每次调用函数时显示传入的值:

defgreet_two(greeting):print(greeting)

在此之后,greet_two()功能必须与参数调用:

greet_two("Howdy")#Out: Howdy

也可以给该函数参数一个默认值:

def greet_two(greeting="Howdy"):print(greeting)

现在可以调用该函数而不给出值:

greet_two()#Out: Howdy

您会注意到,与许多其他语言不同,您不需要显式声明函数的返回类型。Python函数可以通过返回任何类型的值return关键字。一个函数可以返回任意数量的不同类型!

defmany_types(x):if x <0:return "Hello!"

else:return0print many_types(1)print many_types(-1)#Output:

0

Hello!

只要调用者正确地处理它,这是完全有效的Python代码。

到达执行结束没有return语句的函数总是返回None:

defdo_nothing():pass

print(do_nothing())#Out: None

如前所述,函数定义必须有一个函数体,一个非空的语句序列。因此,pass语句作为函数体,这是一个空操作-当执行它,什么都不会发生。当语句需要语句时,它作为占位符是有用的,但是不需要执行代码。

用任意数量的参数定义函数

位置参数的任意数量:

定义一个能够获取任意数量的参数的函数可以通过在参数前面加上一个参数来完成*

def func(*args):#args will be a tuple containing all values that are passed in

for i inargs:print(i)

func(1, 2, 3) #Calling it with 3 arguments#Out: 1#2#3

list_of_arg_values= [1, 2, 3]

func(*list_of_arg_values) #Calling it with list of values, * expands the list#Out: 1#2#3

func()#Calling it without arguments#No Output

你不能提供一个默认的args,例如func(*args=[1, 2, 3])将引发一个语法错误(甚至不会编译)。

你不能调用函数时,例如通过名称提供这些func(*args=[1, 2, 3])会提高一个TypeError。

但是,如果你已经有了你的论点在数组(或其他Iterable),你可以调用你的功能如下:func(*my_stuff)。

这些参数(*args)可以通过索引访问,例如args[0]将返回第一个参数

关键字参数的任意数目

您可以通过定义在定义的参数取一个名字参数任意数量2 *在它的面前:

def func(**kwargs):#kwargs will be a dictionary containing the names as keys and the values as values

for name, value inkwargs.items():print(name, value)

func(value1=1, value2=2, value3=3) #Calling it with 3 arguments#Out: value2 2#value1 1#value3 3

func()#Calling it without arguments#No Out put

my_dict= {‘foo‘: 1, ‘bar‘: 2}

func(**my_dict) #Calling it with a dictionary#Out: foo 1#bar 2

你不能提供这些没有名字,例如func(1, 2, 3)将引发一个TypeError。

kwargs是一个普通的本地python字典。例如,args[‘value1‘]将给予参数的值value1。请务必先确认是否有这样的说法或KeyError将提高。

警告

您可以将这些与其他可选和必需的参数混合,但在定义内的顺序很重要。

该位置/关键字参数放在第一位。(必需参数)。

然后是任意 *arg参数。(可选的)。

那么只有关键字的论据来下一个。(需要)。

最后,任意关键字 **kwargs来了。(可选的)。

#|-positional-|-optional-|---keyword-only--|-optional-|

def func(arg1, arg2=10 , *args, kwarg1, kwarg2=2, **kwargs):pass

arg1必须给予,否则一个TypeError上升。它可以给出作为位置(func(10))或关键字参数(func(arg1=10))。

kwarg1也必须给予,但它只能作为关键字参数来提供:func(kwarg1=10)。

arg2和kwarg2是可选的。如果该值要更改的相同的规则arg1(无论是位置还是关键字)和kwarg1(仅限于关键字)适用。

*args捕获额外的位置参数。但是注意,arg1并arg2必须作为位置参数传递参数提供*args:func(1, 1, 1, 1)。

**kwargs捕捉所有其他关键字参数。在这种情况下,即没有任何参数arg1,arg2,kwarg1或kwarg2。例如:func(kwarg3=10)。

在Python 3,你可以使用*单独指示所有后续参数必须指定为关键字。比如math.isclose在Python 3.5的功能和更高的使用规定def math.isclose (a, b, *, rel_tol=1e-09, abs_tol=0.0),这意味着前两个参数可以在位置上提供,但可选的第三个和第四个参数只能作为关键字参数提供。

Python 2.x不支持仅关键字的参数。这种行为可以被效仿kwargs:

def func(arg1, arg2=10, **kwargs):try:

kwarg1= kwargs.pop("kwarg1")exceptKeyError:raise TypeError("missing required keyword-only argument: ‘kwarg1‘")

kwarg2= kwargs.pop("kwarg2", 2)#function body ...

有关命名的注意事项

命名可选位置参数的约定args和可选关键字参数kwargs只是你一个约定可以使用任何你喜欢的名字,但它是遵循惯例有用的,让其他人知道你在做什么,甚至自己以后所以请不要。

注意唯一性

任何功能可以与被定义没有或者一个 *args和无或一种 **kwargs,但不与每一个以上。还*args 必须是最后一个位置参数,并**kwargs必须是最后一个参数。试图使用的任一个以上的将导致一个语法错误异常。

有关可选参数的嵌套函数的注意事项

这是可以嵌套这样的功能和一般的惯例是删除代码已处理的项目,但如果你是传承的参数需要传递一个可选的位置ARGS*前缀和可选关键字ARGS一个**前缀,否则ARGS可以作为列表或元组传递,并将kwargs作为单个字典传递。例如:

def fn(**kwargs):print(kwargs)

f1(**kwargs)def f1(**kwargs):print(len(kwargs))

fn(a=1, b=2)#Out:#{‘a‘: 1, ‘b‘: 2}#2

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

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

相关文章

深入解析 C# 的 String.Create 方法

作者&#xff1a;Casey McQuillan译者&#xff1a;精致码农原文&#xff1a;http://dwz.win/YVW说明&#xff1a;原文比较长&#xff0c;翻译时精简了很多内容&#xff0c;对于不重要的细枝末节只用了一句话概括&#xff0c;但不并影响阅读。你还记得上一次一个无足轻重的细节点…

算法设计与分析——回溯法——n皇后问题

一、什么是N皇后问题&#xff1f; 在nn格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于再nn的棋盘上放置n个皇后&#xff0c;任何2个皇后不妨在同一行或同一列或同一斜线上。 问题…

全局程序集缓存gac中安装程序集_我就不信2W字把源码拆的这么碎,你还不明白mybatis缓存...

前言不知道大家看到这张图感觉怎么样&#xff0c;不是难&#xff0c;一共也没有几个组件&#xff0c;但是真的让我想当头疼&#xff0c;因为在面试的时候&#xff0c;就这张图&#xff0c;对&#xff0c;你没看错&#xff0c;就这几个组件&#xff0c;那是让我相当难受啊MyBati…

GraphQL:和EntityFramework更配哦

GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述&#xff0c;使得客户端能够准确地获得它需要的数据&#xff0c;而且没有任何冗余&#xff0c;也让 API 更容易地随着时间推移而演进&#xff0c…

算法设计与分析——回溯法——符号三角形问题

#include<iostream> using namespace std;class Triangle{public:void Backtrack(int t);int n;//第一行的符号个数 int half;//n*(n1)/4 int count;//当前—的个数 int **p;//符号三角形矩阵 long sum; //已找到的符号三角形数 };void Triangle::Backtrack(int t) {if(…

mysql 默认事务隔离级别_MySQL 事务隔离级别详解

个人公众号『码农札记』&#xff0c;欢迎关注&#xff0c;查看更多精彩文章。 简介&#xff1a; MySQL的事务隔离级别一共有四个&#xff0c;分别是读未提交、读已提交、可重复读以及可串行化。四个特性ACID原子性 &#xff08;Atomicity&#xff09;事务开始后所有操作&#x…

如何在 Asp.Net Core 中对请求进行限流

译文链接&#xff1a;https://www.infoworld.com/article/3442946/how-to-implement-rate-limiting-in-aspnet-core.html在应用程序开发时&#xff0c;或许你有这样的想法&#xff0c;控制用户的请求频率来防止一些用户的恶意攻击&#xff0c;具体的说就是&#xff1a;为了预防…

算法设计与分析——动态规划——石子合并问题

1.石子合并问题 在一个圆形操场的四周摆放着n堆石子。现要将石子有序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆&#xff0c;并将新的一堆石子数记为该次合并的得分。设计一个算法&#xff0c;计算出将n堆石子合并成一堆的最小得分和最大得分。 #include<st…

软件层面可以做到重启本地串口吗_手机关机还是重启好?get这几招,手机更流畅...

遇到手机卡顿&#xff0c;很多人都会不自觉的选择重启手机&#xff0c;还是不行&#xff0c;就关机等一会儿再开机&#xff0c;这样几次下来手机真的就顺畅多了。那么关机和重启到底有什么区别&#xff1f;还有哪些方法可以保持手机流畅&#xff1f;跟着小编来了解一下&#xf…

在传统行业做数字化转型之团队篇

【数字化转型】| 作者 / Edison Zhou这是EdisonTalk的第309篇原创内容在过去的两年时间里&#xff0c;我加入了一家传统行业的企业参与其数字化转型的过程&#xff0c;现在我将我的经历分享出来&#xff0c;本文是第四部分—团队篇&#xff0c;主要会介绍一下我所在的经济适用型…

python opengl_Python环境搭建之OpenGL

以下内容为我python OpenGl 环境搭建历程&#xff1a;win7 64位操作系统&#xff0c;python3.5.3 &#xff0c;无其他相关。直接cmd或PowerShell输入以下命令&#xff1a;pip install PyOpenGL PyOpenGL_accelerate安装失败&#xff0c;提示需安装Microsoft Visual C 14.0&…

回顾 | 进击吧! Blazor!系列

Blazor 是一个 Web UI 框架&#xff0c;可通过 WebAssembly 在任意浏览器中运行 .Net 。Blazor 旨在简化快速的单页面 .Net 浏览器应用的构建过程&#xff0c;它虽然使用了诸如 CSS 和 HTML 之类的 Web 技术&#xff0c;但它使用 C&#xff03;语言和 Razor 语法代替 JavaScrip…

算法设计与分析——回溯法——旅行售货员问题

#include<iostream> #include<bits/stdc.h> using namespace std; const int noEdge65535; class Traveling {public:void BackTrack(int i);int n; //图G的顶点数 int *x; //当前的解 int *bestx; // 当前的最优解 int **a; // 图G的临界矩阵 int cc; //…

sql不等于0怎么表示_数组真的只能从0开始吗?python表示不同意

背景早在linux操作系统诞生开始&#xff0c;c语言作为linux系统的编程语言主力&#xff0c;它为后续的其他高级编程语言(如c、java)提供了很多语言级的语义和协议规范。数组做为linux操作系统最基本的数据结构之一&#xff0c;便是其中的一项语言级高级特性&#xff0c;深入理解…

ASP.NET Core 5.0新增功能摘要

.NET5.0发布了大半个月&#xff0c;从.NET Core3.1的平滑迁移体验令人心旷神怡&#xff0c;改个targetframework就完成迁移&#xff0c;不要太轻松&#xff01;然而&#xff0c;ASP.NET Core5.0也有很多有意思的改变&#xff0c;这里为大家摘录一下&#xff01;内置swagger在 A…

算法设计与分析——回溯法——圆排列问题

#include<iostream> #include<math.h> using namespace std; class Circle {public:float Center(int t);void Compute(void );void BackTrack(int t);float min; //当前最优值 float *x; //当前圆排列圆心横坐标 float *r; //当前圆排列 float *result; /…

数字图像处理王伟强_深度学习主导下,还有必要学数字图像处理?

图像处理技术作为计算机视觉的基础&#xff0c;通过计算机对图像进行去除噪声增强、复原、分割、提取特征等处理的方法和技术。多用于目标检测与目标识别等领域。>>数字图像处理、CV、CG与AI四者的关系图<<随着计算机视觉的迅速发展&#xff0c;基于深度学习的研究…

Dotnet Core下的Channel, 你用了吗?

今天给大家分享一个微软官方的好东西&#xff1a;Channel。前言今天给大家分享一个微软官方的生产者/消费者方案的特性解决&#xff1a;Channel。Channel在System.Threading.Channels命名空间下&#xff0c;Core 2.1使用时&#xff0c;需要从Nuget上安装。% dotnet add package…

算法设计与分析——贪心算法——单个出水口打水问题

1.打水问题&#xff1a;有n个人去水房排队打水&#xff0c;只有一个出水口&#xff0c;且出水口流速恒定。每个人因为盛水的工具不一&#xff0c;打水所需的时间也不一致&#xff0c;设第i个人所需要的打水时间为ti&#xff1b;问如何安排打水顺序使得所有人的平均等待时间最短…

在传统行业做数字化转型之最终篇

【数字化转型】| 作者 / Edison Zhou这是EdisonTalk的第310篇原创内容在过去的两年时间里&#xff0c;我加入了一家传统行业的企业参与其数字化转型的过程&#xff0c;现在我将我的经历分享出来&#xff0c;本文是最终篇&#xff0c;主要会回答中途一些网友的问题以及推荐一些参…