首页 / PYTHON / [python学习笔记]高级特性
[python学习笔记]高级特性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了[python学习笔记]高级特性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3649字,纯文字阅读大概需要6分钟。
内容图文
迭代iteration
判断一个对象可迭代:
通过for循环来遍历
[root@centos01 python]# cat test.py #!/usr/bin/env python # coding:utf-8 s="hello"for i in s: print i [root@centos01 python]# python test.py h e l l o
[root@centos01 python]# cat test.py #!/usr/bin/env python # coding:utf-8 s = 1 for i in s: print i [root@centos01 python]# python test.py Traceback (most recent call last): File "test.py", line 4, in <module> for i in s: TypeError: ‘int‘ object isnot iterable
通过collections模块的iterable类型判断
In [1]: from collections import Iterable In [2]: isinstance(‘abc‘,Iterable) Out[2]: True In [3]: isinstance({"name":"vaon"},Iterable) Out[3]: True In [4]: isinstance([123],Iterable) Out[4]: True In [5]: isinstance((1,2,3),Iterable) Out[5]: True In [6]: isinstance(1,Iterable) Out[6]: False
列表生成式
for循环
输出1-10之间所有整数求平方之后的结果
In [9]: [i**2 for i in range(1,11)] Out[9]: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
for循环+if语句
输出1-10之间所有整数求平方,再跟2取余为0的结果
In [11]: [i**2 for i in range(1,11) if (i**2)%2 == 0] Out[11]: [4, 16, 36, 64, 100]
for循环+for循环
输出‘abc‘和‘123‘的全排列
In [12]: [i+j for i in"abc"for j in"123"] Out[12]: [‘a1‘, ‘a2‘, ‘a3‘, ‘b1‘, ‘b2‘, ‘b3‘, ‘c1‘, ‘c2‘, ‘c3‘]
扩展
列出当前目录下的所有.py文件或目录
#os.listdir(".")表示列出当前目录下所有文件、目录
#i.endswith(".py")判断字符串是否以.py后缀结尾,如果以指定后缀结尾返回True,否则返回False
In [26]: [i for i in os.listdir(".") if i.endswith(".py")] Out[26]: [‘check_bool.py‘, ‘function.py‘, ‘test.py‘]
练习1
给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输
入值小于1000。
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))
# !/usr/bin/env python # coding:utf-8 shuru=input("输入一个正整数(<=1000):") def zhishu(num): for i in range(2,num): if num%i == 0: return False else: return True p=[i for i in range(2,shuru) if zhishu(i)] peidui=[(m,n) for m in p for n in p if m+n == shuru and m <= n] print len(peidui)
生成器Generator
背景
通过列表生成式,可以直接创建一个列表(list):
In [2]: [i for i in range(1,10)] Out[2]: [1, 2, 3, 4, 5, 6, 7, 8, 9]
受到内存限制,列表容量肯定是有限的,例如创建一个包含 100 万个元素的列表,会占用很大的存储空间,创建过程有可能使电脑卡住。
定义
在循环的过程中不断由前一个元素推算出后一个元素,但是后续元素并不立刻生成出来。这样就不必创建完整的 list,从而节省大量的空间。在 Python 中,这种一边循环一边计算的机制,称为生成器(Generator)
使用生成器的方式
1.把一个列表生成式的[]改为()
In [3]: g=(i for i in range(1,10000000)) In [4]: g Out[4]: <generator object <genexpr> at 0x7f9d83652dc0>
调用:
使用.next()
每调用一次显示一个元素
In [5]: g=(i for i in range(1,4)) In [6]: g.next() Out[6]: 1 In [7]: g.next() Out[7]: 2 In [8]: g.next() Out[8]: 3 In [9]: g.next() --------------------------------------------------------------------------- StopIteration Traceback (most recent call last) <ipython-input-9-d7e53364a9a7> in <module>() ----> 1 g.next() StopIteration:
使用for循环
In [10]: g=(i for i in range(1,4)) In [11]: for i in g: ....: print i ....: 1 2 3
2.yield用法
如果函数里面有yield关键字,那么调用这个函数的结果赋值给的变量为生成器
当生成器g调用第一个next方法时,会运行函数,直到遇到第一个yield停止
当调用第二个next方法时,会从停止的地方继续执行,直到遇到下一个yield
# !/usr/bin/env python # coding:utf-8 def fun(): print " 1. " # 输出"1." yield " 第一个yield " # 遇到yield停止,yield后面跟的内容可以在print g.next()时显示出来 print " 2. " yield " 第二个yield " print " 3. " yield " 第三个yield " print " 4. " yield " 第四个yield " g = fun() print g.next() print g.next() print g.next() print g.next()
执行结果:
[root@centos01 python]# python test.py
1.
第一个yield
2.
第二个yield
3.
第三个yield
4.
第四个yield
练习1:
Fibonacci(斐波纳契)数列,除第一个和第二个数外,任意一个数都可由前两个数相加得到:1, 1, 2, 3, 5, 8, 13, 21,...,本题要求生成6个数即可
# !/usr/bin/env python # coding:utf-8 def fib(max): #max为最终生成fib数列个数 n,a,b = 0,0,1 #n代表当前fib数列个数,a代表n-1的值,b代表n的值while n < max: yield b #当前第一个数列 a,b = b,a+b n += 1 g = fib(6) #变量g就是生成器for i in g: print i
输出结果:
[root@centos01 python]# python test.py
1
1
2
3
5
8
3.send用法
使用send方法给生成器函数发送数据
使用send方法前,必须先调用一次next()方法
遇到下一个yield停止
原文:https://www.cnblogs.com/vaon/p/11009017.html
内容总结
以上是互联网集市为您收集整理的[python学习笔记]高级特性全部内容,希望文章能够帮你解决[python学习笔记]高级特性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。