基于python的函数 python基础教程函数

Python 之内置函数:filter、map、reduce、zip、enumerate这几个函数在 Python 里面被称为高阶函数基于python的函数,本文主要学习它们基于python的函数的用法 。
filter 函数原型如下:
第一个参数是判断函数(返回结果需要是 True 或者 False),第二个为序列,该函数将对iterable序列依次执行function(item)操作,返回结果是过滤之后结果组成的序列 。
简单记忆:对序列中的元素进行筛选 , 获取符合条件的序列 。
返回结果为: , 使用list函数可以输入序列内容 。
map 函数原型如下:
该函数运行之后生成一个 list,第一个参数是函数、第二个参数是一个或多个序列基于python的函数;
下述代码是一个简单的测试案例:
上述代码运行完毕,得到的结果是:。使用print(list(my_new_list))可以得到结果 。
map函数的第一个参数,可以有多个参数,当这种情况出现后,后面的第二个参数需要是多个序列 。
map 函数解决的问题:
reduce 函数原型如下:
第一个参数是函数,第二个参数是序列,返回计算结果之后的值 。该函数价值在于滚动计算应用于列表中的连续值 。
测试代码如下:
最终的结果是 6,如果设置第三个参数为 4 , 可以运行代码查看结果 , 最后得到的结论是,第三个参数表示初始值,即累加操作初始的数值 。
简单记忆:对序列内所有元素进行累计操作 。
zip 函数原型如下:
zip函数将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表 。
如果各个迭代器的元素个数不一样,则返回列表长度与最短的对象相同 , 利用星号(*)操作符,可以将元组解压为列表 。
测试代码如下:
展示如何利用*操作符:
输出结果如下:
简单记忆:zip 的功能是映射多个容器的相似索引,可以方便用于来构造字典 。
enumerate 函数原型如下:
参数说明:
该函数用于将一个可遍历的数据对象组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中 。
测试代码如下:
返回结果为:。
本文涉及的函数可以与 lambda 表达式进行结合 , 能大幅度提高编码效率 。最好的学习资料永远是官方手册
在Python中定义Main函数目录
许多编程语言都有一个特殊的函数,当操作系统开始运行程序时会自动执行该函数 。这个函数通常被命名为main() , 并且依据语言标准具有特定的返回类型和参数 。另一方面 , Python解释器从文件顶部开始执行脚本,并且没有自动执行的特殊函数 。
尽管如此 , 为程序的执行定义一个起始点有助于理解程序是如何运行的 。Python程序员提出了几种方式对此进行实现 。
本文结束时,您将了解以下内容:
Python中的基本main()函数
一些Python脚本中 , 包含一个函数定义和一个条件语句 , 如下所示:
此代码中,包含一个main()函数,在程序执行时打印Hello World! 。此外 , 还包含一个条件(或if)语句 , 用于检查__name__的值并将其与字符串"__main__"进行比较 。当if语句为True时,Python解释器将执行main()函数 。更多关于Python条件语句的信息可以由此获得 。
这种代码模式在Python文件中非常常见,它将作为脚本执行并导入另一个模块 。为了帮助理解这段代码的执行方式,首先需要了解Python解释器如何根据代码的执行方式设置__name__ 。
Python中的执行模式
Python解释器执行代码有两种方式:
更多内容可参考如何运行Python脚本 。无论采用哪种方式,Python都会定义一个名为__name__的特殊变量 , 该变量包含一个字符串,其值取决于代码的使用方式 。
本文将如下示例文件保存为execution_methods.py,以 探索 代码如何根据上下文改变行为:
在此文件中 , 定义了三个对print()函数的调用 。前两个打印一些介绍性短语 。第三个print()会先打印短语The value __name__ is , 之后将使用Python内置的repr()函数打印出__name__变量 。
在Python中,repr()函数将对象转化为供解释器读取的形式 。上述示例通过使用repr()函数来强调__name__的值为字符串 。更多关于repr()的内容可参考Python文档 。
在本文中 , 您将随处可见文件(file),模块(module)和脚本(script)这三个字眼 。实际上,三者之间并无太大的差别 。不过,在强调代码目的时,还是存在细微的差异:
“如何运行Python脚本”一文也讨论了三者的差别 。
基于命令行执行
在这类方法中,Python脚本将通过命令行来执行 。
执行脚本时,无法与Python解释器正在执行的代码交互 。关于如何通过命令行执行代码的详细信息对本文而言并不重要 , 但您可以通过展开下框阅读更多有关Windows,Linux和macOS之间命令行差异的内容 。
命令行环境
不同的操作系统在使用命令行执行代码时存在细微的差异 。
在Linux和macOS中,通常使用如下命令:
美元符号($)之前的内容可能有所不同,具体取决于您的用户名和计算机名称 。您键入的命令位于$之后 。在Linux或macOS上,Python3的可执行文件名为python3,因此可以通过输入python3 script_name.py来运行python脚本 。
在Windows上 , 命令提示符通常如下所示:
根据您的用户名,之前的内容可能会有所不同,您输入的命令位于之后 。在Windows上,Python3的可执行文件通常为python 。因此可以通过输入python script_name.py来运行python脚本 。
无论哪种操作系统,本文的Python脚本的输出结果都是相同的 。因此本文以Linux和macOS为例 。
使用命令行执行execution_methods.py,如下所示:
在这个示例中,__name__具有值'__main__',其中引号(')表明该值为字符串类型 。
请记住,在Python中,使用单引号(')和双引号(")定义的字符串没有区别 。更多关于字符串的内容请参考Python的基本数据类型 。
如果在脚本中包含"shebang行"并直接执行它(./execution_methods.py) , 或者使用IPython或Jupyter Notebook的%run,将会获取相同的结果 。
您还可以通过向命令行添加-m参数的方法实现以模块的方式执行 。通常情况下,推荐如下方式pip: python3 -m pip install package_name 。
添加-m参数将会运行包中__main__.py的代码 。更多关于__main__.py文件的内容可参考如何将开源Python包发布到PyPI中 。
在三种情况中,__name__都具有相同的值:字符串'__main__' 。
技术细节:Python文档中具体定义了__name__何时取值为'__main__' 。
当通过标准输入,脚本或者交互提示中读取数据时,模块的__name__将取值为'__main__' 。(来源)
__name__与__doc__,__package__和其他属性一起存储在模块的全局命名空间 。更多关于属性的信息可参考Python数据模型文档,特别是关于模块和包的信息,请参阅Python Import文档 。
导入模块或解释器
接下来是Python解释器执行代码的第二种方式:导入 。在开发模块或脚本时,可以使用import关键字导入他人已经构建的模块 。
在导入过程中,Python执行指定模块中定义的语句(但仅在第一次导入模块时) 。要演示导入execution_methods.py文件的结果 , 需要启动Python解释器,然后导入execution_methods.py文件:
在此代码输出中,Python解释器执行了三次print()函数调用 。前两行由于没有变量,在输出方面与在命令行上作为脚本执行时完全相同 。但是第三个输出存在差异 。
当Python解释器导入代码时,__name__的值与要导入的模块的名称相同 。您可以通过第三行的输出了解这一点 。__name__的值为'execution_methods' , 是Python导入的.py文件 。
【基于python的函数 python基础教程函数】 注意如果您在没有退出Python时再次导入模块,将不会有输出 。
注意:更多关于导入在Python中如何工作的内容请参考官方文档和Python中的绝对和相对导入 。
Main函数的最佳实践
既然您已经了解两种执行方式上的差异,那么掌握一些最佳实践方案还是很有用的 。它们将适用于编写作为脚本运行的代码或者在另一个模块导入的代码 。
如下是四种实践方式:
将大部分代码放入函数或类中
请记住,Python解释器在导入模块时会执行模块中的所有代码 。有时如果想要实现用户可控的代码,会导致一些副作用,例如:
在这种情况下 , 想要实现用户控制触发此代码的执行,而不是让Python解释器在导入模块时执行代码 。
因此,最佳方法是将大部分代码包含在函数或类中 。这是因为当Python解释器遇到def或class关键字时,它只存储这些定义供以后使用,并且在用户通知之前不会实际执行 。
将如下代码保存在best_practices.py以证明这个想法:
在此代码中 , 首先从time模块中导入sleep() 。
在这个示例中,参数以秒的形式传入sleep()函数中,解释器将暂停一段时间再运行 。随后,使用print()函数打印关于代码描述的语句 。
之后 , 定义一个process_data()函数,执行如下五项操作:
在命令行中执行
当你将此文件作为脚本用命令行执行时会发生什么呢?
Python解释器将执行函数定义之外的from time import sleep和print(),之后将创建函数process_data() 。然后,脚本将退出而不做任何进一步的操作,因为脚本没有任何执行process_data()的代码 。
如下是这段脚本的执行结果:
我们在这里看到的输出是第一个print()的结果 。注意,从time导入和定义process_data()函数不产生结果 。具体来说,调用定义在process_data()内部的print()不会打印结果 。
导入模块或解释器执行
在会话(或其他模块)中导入此文件时,Python解释器将执行相同的步骤 。
Python解释器导入文件后,您可以使用已导入模块中定义的任何变量 , 类或函数 。为了证明这一点,我们将使用可交互的Python解释器 。启动解释器,然后键入import best_practices:
导入best_practices.py后唯一的输出来自process_data()函数外定义的print() 。导入模块或解释器执行与基于命令行执行类似 。
使用__name__控制代码的执行
如何实现基于命令行而不使用Python解释器导入文件来执行呢?
您可以使用__name__来决定执行上下文,并且当__name__等于"__main__"时才执行process_data() 。在best_practices.py文件中添加如下代码:
这段代码添加了一个条件语句来检验__name__的值 。当值为"__main__"时,条件为True 。记住当__name__变量的特殊值为"__main__"时意味着Python解释器会执行脚本而不是将其导入 。
条件语块内添加了四行代码(第12 , 13,14和15行):
现在,在命令行中运行best_practices.py,并观察输出的变化:
首先,输出显示了process_data()函数外的print()的调用结果 。
之后,data的值被打印 。因为当Python解释器将文件作为脚本执行时 , 变量__name__具有值"__main__",因此条件语句被计算为True 。
接下来,脚本将调用process_data()并传入data进行修改 。当process_data执行时 , 将输出一些状态信息 。最终,将输出modified_data的值 。
现在您可以验证从解释器(或其他模块)导入best_practices.py后发生的事情了 。如下示例演示了这种情况:
注意,当前结果与将条件语句添加到文件末尾之前相同 。因为此时__name__变量的值为"best_practices" , 因此条件语句结果为False,Python将不执行process_data() 。
创建名为main()的函数来包含要运行的代码
现在,您可以编写作为脚本由从命令行执行并导入且没有副作用的Python代码 。接下来 , 您将学习如何编写代码并使其他程序员能轻松地理解其含义 。
许多语言,如C,C,Java以及其他的一些语言,都会定义一个叫做main()的函数,当编译程序时,操作系统会自动调用该函数 。此函数通常被称为入口点(entry point),因为它是程序进入执行的起始位置 。
相比之下,Python没有一个特殊的函数作为脚本的入口点 。实际上在Python中可以将入口点定义成任何名称 。
尽管Python不要求将函数命名为main(),但是最佳的做法是将入口点函数命名为main() 。这样方便其他程序员定位程序的起点 。
此外,main()函数应该包含Python解释器执行文件时要运行的任何代码 。这比将代码放入条件语块中更好 , 因为用户可以在导入模块时重复使用main()函数 。
修改best_practices.py文件如下所示:
在这个示例中,定义了一个main()函数 , 它包含了上面的条件语句块 。之后修改条件语块执行main() 。如果您将此代码作为脚本运行或导入,将获得与上一节相同的输出 。
在main()中调用其他函数
另一种常见的实现方式是在main()中调用其他函数,而不是直接将代码写入main() 。这样做的好处在于可以实现将几个独立运行的子任务整合 。
例如,某个脚本有如下功能:
如果在单独的函数中各自实现这些子任务,您(或其他用户)可以很容易地实现代码重用 。之后您可以在main()函数中创建默认的工作流 。
您可以根据自己的情况选择是否使用此方案 。将任务拆分为多个函数会使重用更容易,但会增加他人理解代码的难度 。
修改best_practices.py文件如下所示:
在此示例代码中,文件的前10行具有与之前相同的内容 。第12行的第二个函数创建并返回一些示例数据,第17行的第三个函数模拟将修改后的数据写入数据库 。
第21行定义了main()函数 。在此示例中 , 对main()做出修改,它将调用数据读取,数据处理以及数据写入等功能 。
首先,从read_data_from_web()中创建data 。将data作为参数传入process_data(),之后将返回modified_data 。最后,将modified_data传入write_data_to_database() 。
脚本的最后两行是条件语块用于验证__name__ , 并且如果if语句为True,则执行main() 。
在命令行中运行如下所示:
根据执行结果,Python解释器在执行main()函数时,将依次执行read_data_from_web(),process_data()以及write_data_to_database() 。当然,您也可以导入best_practices.py文件并重用process_data()作为不同的数据输入源,如下所示:
在此示例中,导入了best_practices并且将其简写为bp 。
导入过程会导致Python解释器执行best_practices.py的全部代码 , 因此输出显示解释文件用途的信息 。
然后,从文件中存储数据而不是从Web中读取数据 。之后,可以重用best_practices.py文件中的process_data()和write_data_to_database()函数 。在此情况下,可以利用代码重写来取代在main()函数中实现全部的代码逻辑 。
实践总结
以下是Python中main()函数的四个关键最佳实践:
结论
恭喜!您现在已经了解如何创建Python main()函数了 。
本文介绍了如下内容:
现在,您可以开始编写一些非常棒的关于Python main()函数代码啦!
python的lambda函数是什么?Python——Lambda表达式是一个匿名函数,Lambda 表达式基于数学中的lambda演算得名,直接对应于其中的 lambda 抽象,是一个匿名函数,即没有函数名的函数 。
Python由荷兰数学和计算机科学研究学会的Guido van Rossum 于1990 年代初设计,作为一门叫做ABC语言的替代品 。Python提供了高效的高级数据结构,还能简单有效地面向对象编程 。
Python语法和动态类型,以及解释型语言的本质 , 使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发 。
Python解释器易于扩展,可以使用C或C(或者其他可以通过C调用的语言)扩展新的功能和数据类型 。Python 也可用于可定制化软件中的扩展程序语言 。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码 。
扩展资料:
python的发展历程:
自从20世纪90年代初Python语言诞生至今,它已被逐渐广泛应用于系统管理任务的处理和Web编程 。
Python的创始人为荷兰人吉多·范罗苏姆 。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序 , 作为ABC语言的一种继承 。之所以选中Python(作为该编程语言的名字,是取自英国20世纪70年代首播的电视喜剧《蒙提·派森的飞行马戏团》 。
ABC是由Guido参加设计的一种教学语言 。就Guido本人看来,ABC这种语言非常优美和强大,是专门为非专业程序员设计的 。但是ABC语言并没有成功,究其原因,Guido认为是其非开放造成的 。Guido决心在Python中避免这一错误 。同时,他还想实现在ABC中闪现过但未曾实现的东西 。
就这样,Python在Guido手中诞生了 。可以说 , Python是从ABC发展起来,主要受到了Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响 。并且结合了Unix shell和C的习惯 。
基于python的opencv学习——copyMakeBorder()函数copyMakeBorder(src, srcBorder, 8, 8, 8, 8, 0, Scalar(255, 255, 255));这是c的,意思是上下左右各加一行8像素的白色的边框,以此类推
Python中的常用内置函数有哪些呢?(1)Lambda函数
用于创建匿名函数,即没有名称的函数 。它只是一个表达式 , 函数体比def简单很多 。当我们需要创建一个函数来执行单个操作并且可以在一行中编写时,就可以用到匿名函数了 。
Lamdba的主体是一个表达式,而不是一个代码块 。仅仅能在lambda表达式中封装有限的逻辑进去 。
利用Lamdba函数 , 往往可以将代码简化许多 。
(2)Map函数
会将一个函数映射到一个输入列表的所有元素上,比如我们先创建了一个函数来返回一个大写的输入单词 , 然后将此函数应有到列表colors中的所有元素 。
我们还可以使用匿名函数lamdba来配合map函数,这样可以更加精简 。
(3)Reduce函数
当需要对一个列表进行一些计算并返回结果时 , reduce()是个非常有用的函数 。举个例子,当需要计算一个整数列表所有元素的乘积时,即可使用reduce函数实现 。
它与函数的最大的区别就是,reduce()里的映射函数(function)接收两个参数,而map接收一个参数 。
(4)enumerate函数
用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中 。
它的两个参数,一个是序列、迭代器或其他支持迭代对象;另一个是下标起始位置,默认情况从0开始,也可以自定义计数器的起始编号 。
(5)Zip函数
用于将可迭代的对象作为参数 , 将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
当我们使用zip()函数时,如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同 。
68 个 Python 内置函数详解内置函数就是Python给你提供的,拿来直接用的函数,比如print. , input等 。
截止到python版本3.6.2,python一共提供了68个内置函数,具体如下
本文将这68个内置函数综合整理为12大类,正在学习Python基础的读者一定不要错过 , 建议收藏学习!
(1)列表和元组
(2)相关内置函数
(3)字符串
frozenset 创建一个冻结的集合,冻结的集合不能进行添加和删除操作 。
语法:sorted(Iterable, key=函数(排序规则), reverse=False)
语法:fiter(function. Iterable)
function: 用来筛选的函数. 在?lter中会自动的把iterable中的元素传递给function. 然后根据function返回的True或者False来判断是否保留留此项数据 , Iterable: 可迭代对象
搜索公众号顶级架构师后台回复“面试”,送你一份惊喜礼包 。
语法 : map(function, iterable)
可以对可迭代对象中的每一个元素进行映射. 分别去执行 function
hash : 获取到对象的哈希值(int, str, bool, tuple). hash算法:(1) 目的是唯一性 (2) dict 查找效率非常高, hash表.用空间换的时间 比较耗费内存
关于基于python的函数和python基础教程函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读