20170204-py
2019独角兽企业重金招聘Python工程师标准>>>
1.yield from
import asyncio@asyncio.coroutine
def hello_f():for v in range(10):print('fff')@asyncio.coroutine
def hello():print('Hello world!')r = yield from hello_f()print(r)print('Hello Again')loop = asyncio.get_event_loop()loop.run_until_complete(hello())loop.close()
执行结果:
Hello world!
fff
fff
fff
fff
fff
fff
fff
fff
fff
fff
None
Hello Again
def g(x):# yield from range(x)for i in range(x):yield il = list(g(5))
print(l)
2.yield
def libs():a = 0b = 1while True:a,b = b , a+byield afor each in libs():if each > 100:breakprint(each,end=' ')
执行结果:
1 1 2 3 5 8 13 21 34 55 89
3.Python中的and or not
在Python中,对于逻辑运算符and 、or、 not 需要注意一下:
and :x and y 返回的结果是决定表达式结果的值。如果 x 为真,则 y 决定结果,返回 y ;如果 x 为假,x 决定了结果为假,返回 x。
or :x or y 跟 and 一样都是返回决定表达式结果的值。
not : 返回表达式结果的“相反的值”。如果表达式结果为真,则返回false;如果表达式结果为假,则返回true。
a = [i for i in range(100) if not(i%2) and (i % 3)]
a = [i for i in range(100) if (i %2 == 0) and (i %3 != 0)]print(a)b = {i: i%2 == 0 for i in range(10)}
print(b)print(2 %2 == 1)
执行结果:
[2, 4, 8, 10, 14, 16, 20, 22, 26, 28, 32, 34, 38, 40, 44, 46, 50, 52, 56, 58, 62, 64, 68, 70, 74, 76, 80, 82, 86, 88, 92, 94, 98]
{0: True, 1: False, 2: True, 3: False, 4: True, 5: False, 6: True, 7: False, 8: True, 9: False}
False
4.生成器
e = (i for i in range(10))print(e)
print(next(e))
print(next(e))
执行结果:
<generator object <genexpr> at 0x10137f938>
0
1
5.模块倒入
TempeartureConversion.py
def c2f(cel):fah = cel * 1.8 + 32return fahdef f2c(fah):cel = (fah-32) / 1.8return cel
calc.py
from TempeartureConversion import c2fimport TempeartureConversion as tcprint('32 = %02f' % c2f(32))print('89.6 = %02f' % tc.f2c(89.6))
执行结果:
32 = 89.600000
89.6 = 32.000000
6.global
在python中,变量不需要先声明,直接使用即可,那我们怎么知道用的是局部变量还是全局变量呢?
首先:python使用的变量,在默认情况下一定是用局部变量。
其次:python如果想使用作用域之外的全局变量,则需要加global前缀。
举例说明,不用global的情况:
a = 5
def test(): a = 1 print 'In test func: a = %d' % a
test()
print 'Global a = %d' % a
程序执行结果为:
In test func: a = 1
Global a = 5
可以看出,不加global的时候,在函数内部是改不了外面的全局变量的(list类型例外)。
下面是使用global前缀的情况:
a = 5 def test(): global a #此处声明,告诉执行引擎:我要用全局变量a,不要整成局部的了! a = 1 print 'In test func: a = %d' % a test()
print 'Global a = %d' % a
执行结果:
In test func: a = 1
Global a = 1
可以看出,在函数内部成功的修改了全局变量的数值。
事实上,网络上很多文章推崇另外的一种方法来使用全局变量:使用单独的global文件。
方法如下:
1. 在同一个文件夹下,新建2个文件: myglobal.py test.py
2. myglobal.py中放置全局变量,内容示例如下:
a = 0
b = 1
c = 2
d = 3
3. test.py中是测试代码,其中可以使用全局变量
import myglobal def test(): myglobal.a = 100 print 'myglobal a = %d' % myglobal.a
test()
print 'after test, myglobal a = %d' % myglobal.a
执行test.py的结果如下:
myglobal a = 0
after test, myglobal a = 100
OK,同样成功修改了全局变量(这个说法不准确,但姑且就这么叫吧)。
在实际使用中,两种方法各有优势,通常我们大多数时候只是用python写小功能的脚本,此时用global关键字就够了。
如果写比较大的功能应用时,用后一种方法可以使得全局变量的管理更为方便。
7.with as
class Sample:def __enter__(self):print "In __enter__()"return "Foo"def __exit__(self, type, value, trace):print "In __exit__()"def get_sample():return Sample()with get_sample() as sample:print "sample:", sample
执行结果:
In __enter__()
sample: Foo
In __exit__()
1. __enter__()方法被执行
2. __enter__()方法返回的值 - 这个例子中是"Foo",赋值给变量'sample'
3. 执行代码块,打印变量"sample"的值为 "Foo"
4. __exit__()方法被调用with真正强大之处是它可以处理异常。可能你已经注意到Sample类的__exit__方法有三个参数- val, type 和 trace。这些参数在异常处理中相当有用。我们来改一下代码,看看具体如何工作的。
8.装饰器
请编写一个decorator,能在函数调用的前后打印出'begin call'
和'end call'
的日志。
import functoolsdef log(func):def beforfunc(func):print('beging call')def afterfun(func):print('after call')@functools.wraps(func)def wrapper(*args,**kw):beforfunc(func)f = func(*args,**kw)afterfun(func)return freturn wrapper@log
def now():print('aa')now()
9.async/await
用asyncio
提供的@asyncio.coroutine
可以把一个generator标记为coroutine类型,然后在coroutine内部用yield from
调用另一个coroutine实现异步操作。
为了简化并更好地标识异步IO,从Python 3.5开始引入了新的语法async
和await
,可以让coroutine的代码更简洁易读。
请注意,async
和await
是针对coroutine的新语法,要使用新的语法,只需要做两步简单的替换:
- 把
@asyncio.coroutine
替换为async
; - 把
yield from
替换为await
。
让我们对比一下上一节的代码:
@asyncio.coroutine
def hello():print("Hello world!")r = yield from asyncio.sleep(1)print("Hello again!")
用新语法重新编写如下:
async def hello():print("Hello world!")r = await asyncio.sleep(1)print("Hello again!")
剩下的代码保持不变。
小结
Python从3.5版本开始为asyncio
提供了async
和await
的新语法;
注意新语法只能用在Python 3.5以及后续版本,如果使用3.4版本,则仍需使用上一节的方案。
10.callable
中文说明:检查对象object是否可调用。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。
注意:类是可调用的,而类的实例实现了__call__()方法才可调用。
版本:该函数在python2.x版本中都可用。但是在python3.0版本中被移除,而在python3.2以后版本中被重新添加。
英文说明:Return True if the object argument appears callable, False if not. If this returns true, it is still possible that a call fails, but if it is false, calling object will never succeed. Note that classes are callable (calling a class returns a new instance); class instances are callable if they have a __call__() method.
11.函数参数
POSITIONAL_ONLY;位置参数
VAR_POSITIONAL:可变参数
POSITIONAL_OR_KEYWORD:位置参数或命名关键字参数
VAR_KEYWORD:命名关键字参数
KEYWORD_ONLY:关键字参数
命名关键字的一个用法:
#命名关键字的一个用法
configs = {'db': {'host': '127.0.0.1','port': 3306,'user': 'root','password': 'root','db': 'awesome'},'session': {'secret': 'AwEsOmE'}
}def test(**args):print(args)test(**configs)
运行结果:注意两个星号
/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5 /Users/aslan/python_learn/0203/webapp/ios/t.py
{'session': {'secret': 'AwEsOmE'}, 'db': {'port': 3306, 'password': 'root', 'host': '127.0.0.1', 'db': 'awesome', 'user': 'root'}}Process finished with exit code 0
转载于:https://my.oschina.net/aslanjia/blog/831348
20170204-py相关推荐
- 汉字的首拼音字母生成
生成助记码(取汉字的第一个字母) SET NOCOUNT ON GO IF EXISTS(SELECT name FROM sysobjects WHERE name = N'hzp ...
- 解决 win10 pycurl安装出错 Command python setup.py egg_info failed with error code 10 编译安装包 安装万金油...
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/yexiaohhjk/article/d ...
- SyntaxError: Non-ASCII character ‘\xe5‘ in file(xxlrt_1.py) on line 7, but no encoding declared;
具体报错如下: SyntaxError: Non-ASCII character '\xe5' in file /home/hly/work/python/work/xlrt_1.py on line ...
- cygwin执行.py提示找不到模块,但已经安装模块的解决办法
. 在解决了cygwin中make命令不能使用的问题之后(https://www.cnblogs.com/zhenggege/p/10724122.html),make maskrcnn路径下的set ...
- django系列 1 :python+django环境搭建 +mac提示找不到manage.py命令
1.安装python3 2.设置python3的环境变量 3.进入命令行模式,输入 pip install django 1.10.3 4.验证是否安装完成 pip show django 5.dja ...
- svn官方备份hot-backup.py强烈推荐
Author:牛班图 Date:2016/05/18 Address:suzhou --- centos 6.7默认安装的python是2.6.6,大家可以先查看一下自己操作系统的python版本,p ...
- python 一张图画多条线_Gnuplot.py在一张图上绘制多条线
我目前正试图使用gnuplot py从文本文件中绘制多行.我可以分别绘制两条线,但当我试图在同一个图上绘制它们时,它只绘制一条线.在 这是我的代码:#!/usr/bin/env python impo ...
- python中init和setup有什么区别_python – 为什么setup.py在安装期间运行模块__init__.py?...
我正在使用setup.py安装包: python setup.py install 我正在安装的软件包中的__init__.py包含一些软件包级别检查,其中一个检查settings.py中是否有可用的 ...
- keras 的 example 文件 pretrained_word_embeddings.py 解析
该代码演示了 采用预定义的词向量 来进行文本分类的功能. 数据集采用的是 20_newsgroup,18000篇新闻文章,一共涉及到20种话题,训练神经网络,给定一个新闻,可以识别出是属于哪一类的新闻 ...
- keras 的 example 文件 neural_doodle.py 解析
这是一个电脑学习涂鸦的程序 在不指定 content-image 的时候,运行指令如下: python neural_doodle.py --nlabels 4 --style-image Monet ...
最新文章
- WebStorm添加多个项目到当前工程目录
- NLP中各框架对变长序列的处理全解
- Vue 用户管理后台思维导图
- ngrok布置外网访问环境
- C++中private成员变量和protect成员变量的区别
- 为了养成NLP卷王,我画了一张路线图
- rational rose 启动选择_Rational Rose打开问题
- 理解Asp.Net自定义控件的生命周期
- node创建新html页面,node创建服务器之展示html页面
- 关于LED 流水灯的软件调试方法(非开发板调试)
- Model to Text工具Acceleo使用教程(六)——模板服务
- 2. laravel 创建第一条路由
- Foundation框架: 6.NSString的创建和导出
- element-plus Table 表格自定义列模板使用及问题
- 使用python解析pdf文件
- 做SEO优化第九步:如何设置页面内容优化
- 8b/10b编码技术系列(二):Disparity、RD、8b/10b编码
- django集成Sphinx,为项目自动生成文档
- 魔兽世界活跃人数持续下降
- spring 整合c3p0连接池
热门文章
- 实时获取ccd图像_四元数数控:CCD视觉检测定位系统在玻璃瓶缺陷的检测
- 山东省2O2021年普通高考成绩查询,2021山东高考报名人数公布
- python字符串截取_Python-变量-No3
- 如何判断离散数组 是递增趋势_期货交易中,如何通过交易周期判断趋势,做到顺势而为?...
- php关联二维数组,php-检查关联二维数组
- proteus三输入与非门名字_Proteus仿真库元件名大全
- ie浏览器自带小眼睛是什么用的_茅台酒自带的小杯子有什么用?是用来喝酒的嘛?...
- PyQt5 笔记2 -- Qt Designer使用
- PowerBI随笔(1)-类似vlookup的合并查询
- 【机器学习】中国大学慕课《机器学习》课后习题(二)(回归)