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开始引入了新的语法asyncawait,可以让coroutine的代码更简洁易读。

请注意,asyncawait是针对coroutine的新语法,要使用新的语法,只需要做两步简单的替换:

  1. @asyncio.coroutine替换为async
  2. 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提供了asyncawait的新语法;

注意新语法只能用在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相关推荐

  1. 汉字的首拼音字母生成

    生成助记码(取汉字的第一个字母) SET NOCOUNT ON GO IF EXISTS(SELECT name    FROM   sysobjects    WHERE  name = N'hzp ...

  2. 解决 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 ...

  3. 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 ...

  4. cygwin执行.py提示找不到模块,但已经安装模块的解决办法

    . 在解决了cygwin中make命令不能使用的问题之后(https://www.cnblogs.com/zhenggege/p/10724122.html),make maskrcnn路径下的set ...

  5. django系列 1 :python+django环境搭建 +mac提示找不到manage.py命令

    1.安装python3 2.设置python3的环境变量 3.进入命令行模式,输入 pip install django 1.10.3 4.验证是否安装完成 pip show django 5.dja ...

  6. svn官方备份hot-backup.py强烈推荐

    Author:牛班图 Date:2016/05/18 Address:suzhou --- centos 6.7默认安装的python是2.6.6,大家可以先查看一下自己操作系统的python版本,p ...

  7. python 一张图画多条线_Gnuplot.py在一张图上绘制多条线

    我目前正试图使用gnuplot py从文本文件中绘制多行.我可以分别绘制两条线,但当我试图在同一个图上绘制它们时,它只绘制一条线.在 这是我的代码:#!/usr/bin/env python impo ...

  8. python中init和setup有什么区别_python – 为什么setup.py在安装期间运行模块__init__.py?...

    我正在使用setup.py安装包: python setup.py install 我正在安装的软件包中的__init__.py包含一些软件包级别检查,其中一个检查settings.py中是否有可用的 ...

  9. keras 的 example 文件 pretrained_word_embeddings.py 解析

    该代码演示了 采用预定义的词向量 来进行文本分类的功能. 数据集采用的是 20_newsgroup,18000篇新闻文章,一共涉及到20种话题,训练神经网络,给定一个新闻,可以识别出是属于哪一类的新闻 ...

  10. keras 的 example 文件 neural_doodle.py 解析

    这是一个电脑学习涂鸦的程序 在不指定 content-image 的时候,运行指令如下: python neural_doodle.py --nlabels 4 --style-image Monet ...

最新文章

  1. WebStorm添加多个项目到当前工程目录
  2. NLP中各框架对变长序列的处理全解
  3. Vue 用户管理后台思维导图
  4. ngrok布置外网访问环境
  5. C++中private成员变量和protect成员变量的区别
  6. 为了养成NLP卷王,我画了一张路线图
  7. rational rose 启动选择_Rational Rose打开问题
  8. 理解Asp.Net自定义控件的生命周期
  9. node创建新html页面,node创建服务器之展示html页面
  10. 关于LED 流水灯的软件调试方法(非开发板调试)
  11. Model to Text工具Acceleo使用教程(六)——模板服务
  12. 2. laravel 创建第一条路由
  13. Foundation框架: 6.NSString的创建和导出
  14. element-plus Table 表格自定义列模板使用及问题
  15. 使用python解析pdf文件
  16. 做SEO优化第九步:如何设置页面内容优化
  17. 8b/10b编码技术系列(二):Disparity、RD、8b/10b编码
  18. django集成Sphinx,为项目自动生成文档
  19. 魔兽世界活跃人数持续下降
  20. spring 整合c3p0连接池

热门文章

  1. 实时获取ccd图像_四元数数控:CCD视觉检测定位系统在玻璃瓶缺陷的检测
  2. 山东省2O2021年普通高考成绩查询,2021山东高考报名人数公布
  3. python字符串截取_Python-变量-No3
  4. 如何判断离散数组 是递增趋势_期货交易中,如何通过交易周期判断趋势,做到顺势而为?...
  5. php关联二维数组,php-检查关联二维数组
  6. proteus三输入与非门名字_Proteus仿真库元件名大全
  7. ie浏览器自带小眼睛是什么用的_茅台酒自带的小杯子有什么用?是用来喝酒的嘛?...
  8. PyQt5 笔记2 -- Qt Designer使用
  9. PowerBI随笔(1)-类似vlookup的合并查询
  10. 【机器学习】中国大学慕课《机器学习》课后习题(二)(回归)