自从20世纪90年代初Python语言诞生至今,它已被逐渐广泛应用于系统管理任务的处理和Web编程。
Python的创始人为荷兰人吉多·范罗苏姆[3](GuidovanRossum)。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。之所以选中Python(大蟒蛇的意思)作为该编程语言的名字,是取自英国20世纪70年代首播的电视喜剧《蒙提.派森的飞行马戏团》(MontyPython’sFlyingCircus)。
TIOBE社区发布的2017年3月和2018年3月的编程语言热度榜(部分)
Python语言有的设计理念和哲学,称为“Python之禅”。Python之禅是Python的灵魂,理解Python之禅能帮助开发人员编写出优秀的Python程序。在Python交互式方式运行工具IDLE(也称为Pythonshell)中输入importthis命令,如图所示,显示的内容就是Python之禅。
Python3.8.1(tags/v3.8.1:1b293b6,Dec182019,22:39:24)[MSCv.191632bit(Intel)]onwin32Type"help","copyright","credits"or"license()"formoreinformation.>>>importthisTheZenofPython,byTimPetersBeautifulisbetterthanugly.Explicitisbetterthanimplicit.Simpleisbetterthancomplex.Complexisbetterthancomplicated.Flatisbetterthannested.Sparseisbetterthandense.Readabilitycounts.Specialcasesaren'tspecialenoughtobreaktherules.Althoughpracticalitybeatspurity.Errorsshouldneverpasssilently.Unlessexplicitlysilenced.Inthefaceofambiguity,refusethetemptationtoguess.Thereshouldbeone--andpreferablyonlyone--obviouswaytodoit.Althoughthatwaymaynotbeobviousatfirstunlessyou'reDutch.Nowisbetterthannever.Althoughneverisoftenbetterthan*right*now.Iftheimplementationishardtoexplain,it'sabadidea.Iftheimplementationiseasytoexplain,itmaybeagoodidea.Namespacesareonehonkinggreatidea--let'sdomoreofthose!翻译:
《Python之禅》(TheZenofPython),蒂姆·彼得斯(TimPeters)著美丽总比丑陋好。显式的比隐式的好。简单总比复杂好。复杂总比复杂好。平铺总比嵌套好。稀疏总比稠密好。可读性。特殊情况并不特别到足以违反规则。尽管实用性胜过纯洁性。错误不应该悄无声息地过去。除非显式地沉默。面对模棱两可的情况,拒绝猜测的诱惑。应该有一种——最好是只有一种——显而易见的方法。尽管这种方式一开始可能并不明显,除非你是荷兰人。现在总比没有好。尽管“从不”常常比“现在”更好。如果实现很难解释,那就是个坏主意。如果实现很容易解释,这可能是一个好主意。名称空间是一个伟大的想法——让我们做更多这样的事情!
1.程序运行方法:程序编写结束就可以运行了,可以使用快捷键Ctrl+F5运行程序。在visualstudiocode里面打开终端就可以找到调试控制台查看运行。
2.编写代码:首先使用visualstudiocode或者任何编辑器创建一个文件,然后将文件保存为*.py的格式,接着在文件中编写代码。
3.第一个python代码——HelloWorld!——hello.py输入如下代码:
"""Createdon2020/1/9编写者:Thomas"""string="HelloWorld"print(string)funmain(args:Array
"""Createdon2020/1/9编写者:Thomas"""string="HelloWorld"print(string)print("HelloWorld")使用PythonShell实现(1)点击Python**。Lnk快捷方式启动
(2)在windows命令提示符中输入Python(不区分大小写,如果你的电脑里有Python2和Python3,那么启动Python2用“Python”,启动Python3用“Python3”)
(3)通过PythonIDLE启动PythonShell,PythonIDLE提供了简单的文本编辑功能,如剪切、复制、粘贴、撤销和重做等,且支持语法高亮显示。
无论采用哪一种方式启动PythonShell,其命令提示符都是“>>>”,在该命令提示符后可以输入Python语句,然后按下Enter键就可以运行Python语句,PythonShell马上输出结果。
到现在只介绍了如何编写程序和运行Helloworld,并没有进行解释
实例详见书P33页
注释:
Python注释使用井号"#",使用时"#"位于注释行的开头,#后面
有一个空格,接着写注释内容。
在第三章中介绍过文档字符串,它也是一种注释,只是用来注释文档的,可以多行注释。
print("helloworld")#print("helloworld")'''这是Python文档注释'''编译器不处理注释
标识符就是变量、常量、函数、属性、类、模块、包等由程序员指定的名字。构成标识符的字符均有一定的规范,Python语言中标识符的命名规则如下:
(1)区分大小写,Myname和myname是两个不同的标识符
(2)首字母可以试试下划线“_”或字母,但不能是数字
(3)除首字符外其他字符,可以是下划线、字母和数字
(4)关键字不能作为标识符
(5)不能使用Python内置函数作为自己的标识符
关键字是类似于标识符的字符序列,由语言本身定义好。Python语言中有33个关键字,只有False、None、True首字母大写,其他的全部小写。具体内容见表。
量,实例代码如下:
注意b这个变量,虽然已经赋值False(bool),但是它也可以接受其他类型
保留字即关键字,我们不能把它们用作任何标识符名称。Python的标准库提供了一个keyword模块,可以输出当前版本的所有关键字:
Python3.8.1(tags/v3.8.1:1b293b6,Dec182019,22:39:24)[MSCv.191632bit(Intel)]onwin32Type"help","copyright","credits"or"license()"formoreinformation.>>>importkeyword>>>keyword.kwlist['False','None','True','and','as','assert','async','await','break','class','continue','def','del','elif','else','except','finally','for','from','global','if','import','in','is','lambda','nonlocal','not','or','pass','raise','return','try','while','with','yield']>>>Python命名规范程序代码中到处都是标识符,因此取一个一致并且符合规范的名字非常重要。Python中命名规范采用多种不同方式。不同的代码元素命名不同,下面将分类说明。
驼峰命名法:
1.大驼峰,每一个单词的首字母都大写,例如:AnamialZoo,JavaScript中构造函数用的是大驼峰式写法。
2.小驼峰,第一个单词的首字母小写,后面的单词的首字母全部大写,例如:fontSize、backgroundColor。
在Python中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。
等号(=)用来给变量赋值。
等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。
#!/usr/bin/python3counter=100#整型变量miles=1000.0#浮点型变量name="nowcoder"#字符串print(counter)print(miles)print(name)输出
1001000.0nowcoder数字类型Python数字类型有4种:整数类型、浮点数类型、复数类型和布尔类型。
Python整数类型称为int,整数类型的范围可以很大(Python2里有long类型,Python3中没有long类型),只受所在计算机硬件的限制。
整数类型默认为十进制数,但是也可以表示十六进制、八进制和二进制,表示方法如下。
例子(在PythonShell中运行)
>>>2828>>>0b1110028>>>0o3428>>>0O3428>>>0x1c28浮点数类型Python的浮点类型为float,float类型用于存储小数类型,只支持双精度浮点数。大小写e可以表示10的指数。e2表示10^2.
PythonShell实例:
>>>1.01.0>>>0.00.0>>>3.36e2336.0>>>1.56e-20.0156复数类型很多计算机语言都不支持复数类型,但是Python语言支持复数。
Python中复数类型为complex。例如1+2j表示实部为1、虚部为2的复数。
PythonShell中运行如下
>>>(1+2j)(1+2j)>>>(1+2j)+(1+2j)(2+4j)布尔类型布尔值为bool,bool是int的子类,它只有两个值:True和False(第一个字母必须大写)
实例:
>>>bool(0)False>>>bool(2)True>>>bool(1)True>>>bool('')False>>>bool('')TruePython中的字符串类型Unicode字符'HelloWorld'"HelloWorld"'\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\uoo64'"\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\uoo64"Python中的字符不同于c++字符,Python使用Unicode编码,所以字符串可以包含中文等亚洲字符。
代码第①行和第②行的字符串使用Unicode编码表示的字符串,事实上它表示的也是HelloWorld字符串,
可通过print()函数将Unicode编码表示的字符串输出到控制台上,就会看到HelloWorld字符串。
PythonShell运行实例:
>>>s='HelloWorld'>>>print(s)HelloWorld>>>s="HelloWorld">>>print(s)HelloWorld>>>s='\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\uoo64'>>>print(s)HelloWorld>>>s="\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\uoo64">>>print(s)HelloWorld数字类型的转换隐式类型转换多个数字类型之间可以进行数学计算,由于参与运算的数字类型可能不同,此时会发生隐式类型转换,如表
>>>a=1+True>>>print(a)2>>>a=1.0+1>>>type(a)
>>>int(False)0>>>int(True)1>>>int(19.6)19>>>float(5)5.0>>>float(False)0.0>>>float(True)1.0字符串类型Python中字符串类型是str,不是string。Python中有3种字符串表示方法
Python语言支持以下类型的运算符:
接下来让我们一个个来学习Python的运算符。以下假设变量a为10,变量b为21:
其他见实验程序……
#coding=UTF-8a=10b=21print("a+b=",a+b)print("a-b=",a-b)print("a*b=",a*b)print("a/b=",a/b)print("a%b=",a%b)print("a**b=",a**b)print("9//2=",9//2)print("-9//2=",-9/2)关系、逻辑运算符扩展:‘+’号还可以把两个字符串连接起来,‘*’号可以倍增!PythonShell实例
>>>'hello'+'world''helloworld'>>>'hello'*2'hellohello'关系运算符关系运算符无需多说,Python中有6种,和c++一模一样:==、!=、>、<、>=、<=。具体说明见下表
在PythonShell运行实例:
"""Python3.8.1(tags/v3.8.1:1b293b6,Dec182019,22:39:24)[MSCv.191632bit(Intel)]onwin32Type"help","copyright","credits"or"license()"formoreinformation."""#所以注释>>>a=1>>>b=2>>>a>bFalse>>>a
>>>a='Hello'>>>b='Hello'>>>a==bTrue>>>a='World"SyntaxError:EOLwhilescanningstringliteral>>>a='world'>>>a>bTrue>>>a
逻辑运算符也不用多说原理,直接开干!
说明学过c的人都会。
赋值运算符还是无需多说,只看下面Python赋值运算符内容表
Python还有其他的一些运算符,先介绍两个“测试”运算符,同一性测试运算符和成员测试运算符。
这种运算符就是测试两个对象是否同一个对象,类似运算符,不同之处在于是测试两个对象的内容,而同一性测试运算符只测试对象。
同一性测试运算符有两个:is和isnot,is是判断同一,isnot是判断不是同一。
成员测试运算符可以测试在一个序列对象中是否包含某一个元素(所谓成员),成员测试运算符有两个:in和notin。
#!/usr/bin/python3#coding=UTF-8字符串='hello'string_a='Hello'print('e'in字符串)#Trueprint('ell'notinstring_a)#Falsea=[0,3]print(type(a))print('--')list_a=[1,2]print(2inlist_a)#Trueprint(1notinlist_a)#False#!/usr/bin/python3#coding=UTF-8classPerson:def__init__(self,name,age):self.name=nameself.age=agep1=Person('Tony',18)p2=Person('Tony',18)print(p1==p2)#Falseprint(p1isp2)#Falseprint(p1!=p2)#Trueprint(p1isnotp2)#True控制语句程序设计中的控制语句有三种,即顺序、分支和循环结构,Python中的控制语句有以下几类
Python中分支语句只有if语句,这个if语句使得程序具有了“判断能力”,能够像人类的大脑一样分析问题。if语句有if结构、if-else结构和elif结构三种。
例题:输入分数,计算优秀、中等、差。
if语句结构如下:
if条件: 语句组 ……代码:
#coding=utf-8#!/usr/bin/python3importsysscore=int(sys.argv[1])ifscore>=85:print("您真优秀")ifscore<60:print("您需要加倍努力")ifscore>=60:print("您的成绩还可以,仍要继续努力!")if-else结构几乎所有的计算机语言都有这个结构,先判断条件,如果返回值为True,那么执行语句,否则执行else内的语句。
if-else结构如下:if条件: 语句组1else: 语句组2elif结构elif结构就是c++语言中的elseif结构,elif实际上是if-else的多重嵌套,不用多说
#coding=utf-8#!/usr/bin/python3importsysscore=int(sys.argc[1])ifscore>=60:print("及格")ifscore>=90:print("优秀")else:print("不及格")elif结构实例#coding=utf-8#!/usr/bin/python3importsysscore=int(sys.argv[1])ifscore>=90:grade='A'elifscore>=80:grade='B'elifscore>=70:grade='C'elifscore>=60:grade='D'else: grade='F'print("Grade="+grade)循环语句循环语句能够使程序代码重复执行。Python支持while和for两种循环语句。
while语句是一种先判断后执行的循环语句,格式如下:
while循环条件: 语句组[else: 语句组]while循环没有初始化语句,循环次数是不可知的,只要循环条件满足,循环就会一直执行循环体。while循环中可以带有else语句,else语句将在后面介绍。
for语句是应用最广泛、功能最强的一种循环语句。Python语言中没有c语言风格的for语句,它的for语句相等于Java中增强for循环语句,只用于序列,序列包括字符串、列表和元组。
for语句格式如下:
for迭代变量in序列: 语句组[else: 语句组]while语句实例:#coding=utf-8#!/usr/bin/python3i=0whilei*i<100_000:i+=1print("i={0}".format[i])print("i*i={0}".format(i*i))输出结果如下:
i=317i*i=100489for语句实例:#coding-utf-8#!/usr/bin/python3print("------范围------")fornuminrange(1,10):print("{0}x{0}={1}".format(num,num*num))print("------字符串------")foritemin'Hello':print(item)numbers=[43,32,53,54,75,7,10]print("------整数列表------")foriteminnumbers:print("Countis:{0}".format(item))输出结果:
------范围------1x1=12x2=43x3=94x4=85x5=256x6=367x7=498x8=649x9=81------字符串------Hello------整数列表------Countis:43Countis:32Countis:53Countis:54Countis:75Countis:7Countis:10for语句的range()函数是创建一个范围对象,它的取值范围是1≤range(1,10)<10,步长默认为1,总共10个整数
跳转语句能够改变程序的执行顺序,可以实现程序的跳转。Python有3种跳转语句:break、continue和return。本章重点介绍break和continue的使用。return将在后面章节介绍。
break语句可用于while语句和for语句,它的作用是强行退出循环体,不再执行循环中剩余的语句。
下面是一个实例,代码如下:
#coding=utf-8#!/usr/bin/python3foriteminrange(10):ifitem==3:#跳出循环breakprint("Countis:{0}".format(item))上述代码item变量默认从0开始迭代。运行结果如下:
Countis:0Countis:1Countis:2Continue语句Continue语句用来结束本次循环,跳过循环体中尚未执行的语句,接着进行终止条件的判断,已决定是否继续循环。
实例,代码如下:
#coding=utf-8#!/usr/bin/python3foriteminrange(10):ifitem==3:continueprint("Countis:{0}".format(item))上述代码中,当条件item==3的时候执行continue语句,continue语句会终止本次循环,循环体中continue之后的语句将不再执行,进行下次循环,所以输出结果中没有3
ans:
Countis:0Countis:1Countis:2Countis:4Countis:5Countis:6Countis:7Countis:8Countis:9While和For中的else语句while和for语句的else和if中的else语句不同,这里的else是在循环体正常结束时才运行的代码,当循环被中断时不执行,break、return和异常抛出都会中断循环。
while、for加else实例:(if-break被注释掉)
#coding=utf-8#!/usr/bin/python3i=0whilei*i<10:i+=1#if==3:#breakprint("{0}*{0}={1}".format(i,i*i))else:print('WhileOver!')#------------------------------foriteminrange(5):ifitem==3:breakprint("Countis:{0}".format(item))else:print("ForOver!")结果:
1*1==12*2==43*3==94*4==16WhileOver!Countis:0Countis:1Countis:2使用范围for语句在使用时需要用范围函数,范围在Python中是range函数,表示一个整数序列,创建范围对象需要使用range()函数,range()函数语法如下:
range([start,]stop[,step])range函数也可以使用复数范围,创建一个递减范围,示例如下:
#coding=utf-8#!/usr/bin/python3foriteminrange(1,10,2):print("Countis:{0}".format(item))print("-------")foriteminrange(1,-10,-3):print("Countis:{0}".format(item))输出结果如下:
Countis:1Countis:3Countis:5Countis:7Countis:9-------Countis:0Countis:-3Countis:-6Countis:-9忘了说了,在Python中,整数为了表示清晰可以用下划线隔开,比如100_000和100000是一样的,小数在小数点前面可以有多个0,比如003.1415926等于3.1415926
当你有很多书的时候,你会考虑买一个书柜,将你的书分门别类地摆放进去。使用了书柜不仅使房间变得整洁,也便于以后使用书时查找。在计算机程序中会有很多数据,这些数据也需要容器将它们管理起来,这就是__数据结构__
常见的有数组(Array)、集合(Set)、列表(list)、队列(queue)、链表(linkedlist)、树(tree)、堆(heap)、栈(stack)和字典(dictionary)等结构。
Python中数据结构主要有序列、集合和字典
元组(tuple)是一种序列(sequence)结构
序列包括的结构有列表(list)、字符串(string)、元组、范围(range)和字节序列(bytes)。序列可以进行的操作有索引、分片、加和乘。
1)索引操作
序列中第一个元素的索引是0,其他元素的索引是第一个元素的偏移量。可以有正偏移量,称为正值索引;也可以有负偏移量,称为负值索引。正值索引的最后一个元素索引是“序列长度-1”,负值索引最后一个元素索引是“-1”。例如Hello字符串,它的正值索引如表
正值索引和负值索引表
Python3.8.1(tags/v3.8.1:1b293b6,Dec182019,22:39:24)[MSCv.191632bit(Intel)]onwin32Type"help","copyright","credits"or"license()"formoreinformation.>>>a="Hello">>>a[0]'H'>>>a[1]'e'>>>a[4]'o'>>>a[-1]'o'>>>a[-2]'l'>>>a[5]Traceback(mostrecentcalllast):File"
>>>a="Hello">>>a*3'HelloHelloHello'>>>print(a)Hello>>>a+=''>>>a+='World'>>>print(a)HelloWorld>>>3)序列分片
序列的分片(slicing)就是从序列中切出小的子序列。分片使用分片运算符,分片运算符有两种形式。
>>>a='Hello'>>>a[1:3]'el'>>>a[:3]'Hel'>>>a[0:3]'Hel'>>>a[0:]'Hello'>>>a[0:5]'Hello'>>>a[:]'Hello'>>>a[1:-1]'ell'附加程序:
元组是一种不可变的序列,一旦创建就不能修改。创建元组可以使用tuple([iterable])函数或直接用逗号“,”将元素分隔。
PythonShell实例代码
>>>21,32,43,45①(21,32,43,45)>>>(21,32,43,45)②(21,32,43,45)>>>a=(21,32,43,45)>>>print(a)(21,32,43,45)>>>('Hello','World')③('Hello','World')>>>('Hello','World',1,2,3)④('Hello','World',1,2,3)>>>tuple([21,32,43,45])⑤(21,32,43,45)代码第①行创建了一个有4个元素的元组,创建元组时使用小括号把元素括起来不是必须的;
代码第②行使用小括号将元素括起来,这只是为了提高程序的可读性
代码第③行创建了一个字符型元组
另外,元组还可以使用tuple([iterable])函数创建,参数iterable可以是任何可迭代对象。代码第⑤行使用了tuple函数创建元组对象,实参[21,32,43,45]是一个列表,列表是可迭代对象,可以作为tuple()函数参数创建元组对象。
创建元组还需注意极端情况:
>>>a=(21)>>>type(a)
>>>a=('Hello','World',1,2,3)①>>>a[1]'World'>>>a[1:3]('World',1)>>>a[2:](1,2,3)>>>a[:2]('Hello','World')上述代码第①行是元组a,a[1]是访问元组的第二个元素,表达式a[1:3]、a[2:]和a[:2]都是分片操作
元组还可以进行拆包(Unpack)操作,就是将元组的元素取出给不同变量
>>>a=('Hello','World',1,2,3)>>>str1,str2,n1,n2,n3=a>>>str1'Hello'>>>str2'World'>>>n11>>>n22>>>n33>>>str1,str2,*n=a>>>str1'Hello'>>>str2'World'>>>n[1,2,3]*n可以直接获取剩余的元素
一般用for语句遍历元组,实例代码
#coding=utf-8#!/usr/bin/python3a={21,32,43,45}foritemina:print(item)print('--------')fori,iteminenumerate(a):print('{0}-{1}'.format(i,item))运行结果:
21324345--------0-211-322-433-45其中enumerate(a)函数可以获取元组对象
#coding=utf-8a=(20)print(type(a))a=(20,)print(type(a))#tuplea=(20,30,40,50,60)print(a)print(a[1])print(a[1:3])a=('Hello','World',1,2,3)str1,str2,n1,n2,n3=aprint(str1)print(str2)print(n1,"",n2,"",n3)str1,str2,*n=aprint(n)列表列表(List)也是一种序列结构,和元组不一样,列表具有可变性,可以追加、插入、删除和替换列表中的元素。
创建列表可以使用list([iterable])函数,或者用中括号[]将元素括起来,元素之间用逗号分隔。在PythonShell中运行实例代码如下:
为什么今天的交互要发一张截图呢?原因我发现visualstudio2019安装上Python插件之后,点击视图,也有Python交互解释器,还有代码高亮,自动补全,比IDLE好用多了!
#同一个代码片>>>[20,10,50,40,30]①[20,10,50,40,30]>>>[][]>>>['Hello','World',1,3,3]②['Hello','World',1,3,3]>>>a=[10]③>>>type(a)
另外,代码第⑤行用list([iterable])函数创建列表。
列表中追加单个元素可以使用append()方法。如果想追加另一列表,可以使用+运算符或者extend()方法
append()方法语法:list.append(x)
其中x参数是要追加的单个元素值
extend()方法语法:list.extend(t)
其中t参数是追加的另外一个列表
>>>student_list=['张三','李四','王五']>>>student_list.append('董六')>>>student_list['张三','李四','王五','董六']>>>student_list+=['刘备','关羽']>>>student_list['张三','李四','王五','董六','刘备','关羽']>>>student_list_extend(['张飞','赵云'])Traceback(mostrecentcalllast):File"
insert()方法语法
list.insert(i,x)
其中参数i是要插入的序列,参数x是要插入的元素数值
PythonShell实例
>>>student_list=['张三','李四','王五']>>>student_list['张三','李四','王五']>>>student_list.insert(2,'刘备')>>>student_list['张三','李四','刘备','王五']替换元素这一点和c++的数组很像,直接修改下标中元素
>>>student_list=['张三','李四','王五']>>>student_list[0]="诸葛亮">>>student_list['诸葛亮','李四','王五']删除元素一种放法是remove()方法,另一种是pop()
1)remove
remove方法从左到右查找列表中的元素,如果找到匹配元素则删除,注意如果找到多个匹配元素,只是删除第一个,如果没有找到会抛出错误。
>>>student_list=['张三','李四','王五']>>>student_list[0]="诸葛亮">>>student_list['诸葛亮','李四','王五']>>>>>>>>>>>>student_list=['张三','李四','王五','王五']>>>student_list.remove('王五')>>>student_list['张三','李四','王五']>>>student_list.remove('王五')>>>student_list['张三','李四']>>>student_list.remove('王五')Traceback(mostrecentcalllast):File"
前面介绍列表的追加、插入和删除时,已经介绍了一些方法。事实上列表还有很多方法,下面再来介绍一些常用方法。
PythonShell中运行实例:
>>>a=[21,32,43,45]>>>a.reverse()>>>a[45,43,32,21]>>>b=a.copy()>>>b[45,43,32,21]>>>a.clear()>>>a[]>>>b[45,43,32,21]>>>a=[45,43,32,21,32]>>>a.count(32)2>>>student_list=['张三','李四','王五']>>>student_list.index('王五')2>>>student_tuple=('张三','李四','王五')>>>student_tuple.index('王五')2>>>student_tuple.index('李四',1,2)1列表推导式Python中有一种特殊表达式——推导式,它可以将一种数据结构作为输入,经过过滤、计算等处理,最后输出另一种数据结构。根据数据结构的不同可分为列表推导式、集合推导式和字典推导式
如果想获得0~9中偶数的平方数列,可以通过for循环实现
n_list=[]forxinrange(10): ifx%2==0: n_list.append(x**2)print(n_list)输出结果:
[0,4,16,36,64]也可以用列表推导式实现,代码如下:
n_list=[x**2forxinrange(10)ifx%2==0]print(n_list)列表推导式格式:
提示:与序列比较,序列中的元素是有序的,可以__重复出现__,而且集合中的元素是无序的,且不能有重复的元素。
序列强调的是有序,集合强调的是不重复,而且当没有重复的元素时,序列和集合可以互相替换。
集合又分为**可变集合和不可变集合**
可变集合类型是set,创建可变集合可以使用set([iterable])函数,或者用大括号{}将元素括起来,元素之间用逗号分隔
>>>a={'张三','李四','王五'}>>>a{'张三','李四','王五'}>>>a={'张三','李四','王五','王五'}>>>a{'张三','李四','王五'}>>>#集合中如果有重复元素,创建时会自动删除重复元素↑...>>>len(a)3>>>b={}>>>type(a)
可变集合类似于列表,可变集合的内容可被修改,可以插入和删除元素。修改可变集合有几个常用的方法。
>>>student_set={'张三','李四','王五'}>>>student_set.add('董六')#随机添加元素,因为集合没有顺序>>>student_set{'张三','董六','李四','王五'}>>>student_set.remove('董六')>>>student_set{'张三','李四','王五'}>>>student_set.remove('董六')Traceback(mostrecentcalllast):File"
实例代码:
#coding=utf-8student_set={'张三','李四','王五'}foriteminstudent_set:print(item)print('-----------')fori,iteminenumerate(student_set):print('{0}-{1}'.format(i,item))输出结果
张三李四王五----------0-张三1-李四2-王五函数式编程函数程序中反复执行的代码可以封装到一个代码块中,这个代码块模仿了数学中的函数,具有函数名、参数和返回值,这就是程序中的函数。
Python中的函数很灵活,它可以在模块中、但是在类之外定义,即函数,其作用域是当前模块;也可以在别的函数中定义,即嵌套函数;还可以在类中定义,即方法。
在前面的学习过程中用到了一些函数,如len()、min()和max(),这些函数都是由Python官方提供的,称为内置函数(BuiltinFunctions,BIFBuilt-inFunctions,BIFBuiltinFunctions,BIF)
本节介绍自定义函数,自定义函数的语法如下
函数定义实例如下:
#coding=utf-8#!/usr/bin/python3defrectangle_area(width,height):area=width*heightreturnarear_area=rectangle_area(320.0,480.0)print("320x480的长方形的面积:{0:.2f}".format(r_area))函数参数Python中的函数参数很灵活,具体体现在传递参数有都中形式上。本节介绍几种不同形式的参数和调用方式。
为了提高函数调用的可读性,在函数调用时可以使用关键字参数调用。采用关键字参数调用函数,在函数定义时不需要做额外工作。
实例代码如下:
在定义函数的时候可以为参数设置一个默认值,调用函数时可以忽略该参数。
实例:(下面两段代码是一体的)
#-*-coding=utf-8-*-defmake_coffee(name="卡布奇诺"):return"制作一杯{0}咖啡".format(name)上述代码定义了makeCoffee()函数,其中把卡布奇诺挺好喝的设置为了默认值。在参数列表中,默认值可以跟在参数类型后面。在调用的时候,如果调用者没有传递参数,则使用默认值,调用代码如下:
coffee1=make_coffee("拿铁")coffee2=make_coffee()print(coffee1)print(coffee2)其中coffee1=make_coffee("拿铁")代码是传递“拿铁”,没有使用默认值。coffee2=make_coffee()这一行没有传递参数,因此使用默认值。
StdOut:
制作一杯拿铁咖啡制作一杯卡布奇诺咖啡
**提示(新手可以不看):**Java语言中make_coffee()函数可以采用重载实现多个版本。Python不支持函数重载,而是使用参数默认值的方式提供类似的重载功能。
Python函数的返回值也是比较灵活的(Python的东西都比较灵活),主要有三种形式:无返回值、单一返回值和多返回值。
有的函数只是为了处理某个过程,此时可以将函数设计为无返回值的。所谓无返回值,事实上是返回None,None表示没有实际意义的数据。
#-*-coding=utf-8-*-defshow_info(sep=':',**info):#可变参数,下面讲一下"""定义**可变参数函数,dict"""print('-----info-----')forkey,valueininfo.items():print('{0}{2}{1}'.format(key,value,sep))return#returnNoneresult=show_info('->',name='Tony',age=18,sex=True)print(result)defsum(*numbers,multiple=1):"""定义*可变参数函数,tuple"""iflen(numbers)==0:returntotal=0.0fornumberinnumbers:total+=numberreturntotal*multipleprint(sum(30.0,80.0))print(sum(multiple=2))StdOut:
-----info-----name->TonyNone110.0None
上述代码show_info()函数中有一个**info的参数,这是一个可变参数,下面详细解释一下。Python中函数的参数个数可以变化,这种参数称为可变参数。Python中的可变参数有两种,即参数前加*或**形式,*可变参数被组装成一个元组,**可变参数在函数中被组装成一个字典。
*可变参数
下面看一个实例:(部分代码)
defsum(*numbers,multiple=1):total=0.0fornumberinnumbers:total+=numberreturntotal*multipleprint(sum(100.0,20.0,30.0))print(sum(30.0,80.0))print(sum(30.0,80.0,multiple=2))double_tuple=(50.0,60.0,0.0)print(sum(30.0,80.0,*double_tuple))>StdOut:>>>150.0>>>>110.0>>>>220.0>>>>220.0不用说都懂了吧:smirk:2.`**`__可变参数__下面看一个实例:(部分代码)```pythondefshow_info(sep=':',**info):print('-----info-----')forkey,valueininfo.items():print('{0}{2}{1}'.format(key,value,sep))show_info('->',name='Tony',age=18,sex=True)show_info(student_name='Tony',sex=True,sep='=')都不用说吧?挺简单的2.返回值为空的时候可以用return或returnNone都可以。
有时候需要函数返回多个值,实现返回多个值的方式有很多,简单的方式是使用元组返回多个值,因为元组可以容纳多个数据,另外元组是不可变的,使用起来比较安全。
#coding=utf-8defposition(dt,speed):posx=speed[0]*dt#speed[0]是X轴上的速度posy=speed[1]*dt#speed[1]是Y轴上的速度return(posx,posy)move=position(60.0,(10,-5))#move是一个元组,用来存储多个返回值print("物体位移:({0},{1})".format(move[0],move[1]))【Python入门自学笔记专辑】——函数嵌套-Lambda表达式函数嵌套前言Python的函数有很多地方不同于c++,它的函数可以嵌套!c++程序员:望尘莫及,太可怕了!不过Python主要是基于c语言开发的,c工程师还是可以自豪的,c语言是要自己做功能,而python自带功能。学哪个各有好处。
好了扯远了,继续说Python函数,python的一个函数可以嵌套多个函数,多个函数还可以嵌套。
deffunc():deffunc1():print("func1")deffunc2():print("func2")deffunc2_1():print("func2.1")print("helloworld")比如上面的这个程序,func函数中嵌套了两个函数——func1和func2,func2又嵌套了func2_1,Python是支持这种情况的。比如:
deffunc():deffunc1():print("func1")deffunc2():print("func2")deffunc2_1():print("func2.1")print("func")func()那么输出结果是:
func先来一个温馨提示:如果要调用函数,必须把函数放在调用的那行上面!再看代码:
deffunc():choose=int(input(">"))deffunc1():print("func1")deffunc2():print("func2")deffunc2_1():print("func2.1")ifchoose==1:func1()elifchoose==2:func2()print("func")func()func()运行结果:
>1func1func>2func2func分析:先调用进func函数,然后定义两个函数func1、func2然后选择,函数必须在选择的上面,不信大伙可以试试。
deffunc():ifchoose==1:func1()elifchoose==2:func2()choose=int(input(">"))deffunc1():print("func1")deffunc2():print("func2")deffunc2_1():print("func2.1")print("func")func()报错信息:UnboundLocalError:localvariable'func1'referencedbeforeassignment原因语句在函数上面,无法调用
把调用语句和函数换位置
deffunc():choose=int(input(">"))deffunc1():print("func1")deffunc2():print("func2")deffunc2_1():print("func2.1")ifchoose==1:func1()elifchoose==2:func2()print("func")func1()报错信息NameError:name'func1'isnotdefined原因调用函数最多一层,比如在函数外面,不可能跨越两层调用func1函数,跨级太多。
先调用进func函数,再调用func1,更高级的办法我也不知道呵呵o( ̄︶ ̄)o
理解了函数类型和函数对象,学习Lambda就简单了,就是一种函数吧,准确的说,是个解决一两步的方法,小方法。
**注意:**Lambda体部分不能是一个代码块,不能包含多余语句,只能有一条语句,语句会计算一个结果返回给Lambda表达式,但是与函数不同的是,不需要使用return语句返回。与其他语言中的Lambda表达式相比,Python中提供的Lambda表达式只能处理一些简单的运算。
#-*-coding=utf-8-*-defcalculate_fun(opr):'''#定义相加函数defadd(a,b):returna+b#定义相减函数defsub(a,b):returna-b'''ifopr=='+':#returnaddreturnlambdaa,b:(a+b)else:#returnsubreturnlambdaa,b:(a-b)f1=calculate_fun('+')f2=calculate_fun('-')print(type(f1))print("10+5={0}".format(f1(10,5)))print("10-5={0}".format(f2(10,5)))运行结果:
今天我又学习python了,哈哈,本人努力为大家写了一篇好文,也是给自己这个Python小白写的整理,Lambda这些东东还是有难度的,在VScode上忙碌2小时,弄明白了!,所以麻烦点一个赞,谢谢!
相信很多人看出来了,这个博客是我把多期的笔记融合在了一起,呵呵