Python函数
1.函数
def example(a,b):
q = a // b #//是截断除法运算符
r = a-q*b
return r
#调用函数
result = example(37,15)
#如果要让函数返回多个值可以使用元组
def example2(a,b):
q = a // b
r = a - q*b
return (q,r)
#使用元组返回多个值时可以很容易的将结果放在单独的变量中
value1,value2 = example(12,23)
#给函数参数提供一个默认值
def connect(hostname,port,timeout = 300)
#函数体
#调用时可以忽略默认值参数
connect('11.11.111.11',8080) #第一种方式
connect(hostname = '11.11.111.11',port = 80) #可以以任意参数顺序调用
函数体中创建的变量,默认作用域是局部的,当函数返回值后会立即销毁该变量。如果函数内部修改某个全局变量的值,可以使用global语句。
count = 0
def foo():
global count
count += 1
2.生成器
任何使用yield语句的函数都成为生成器,调用生成器函数将创建一个对象,该对象通过调用next()生成结果序列。可以让一个函数生成一个结果序列,而不仅仅是一个值
def exaple(n):
print("Counting down")
while(n > 0):
yield n #生成一个值(n)
n -= 1
生成器是基于处理管道、流或数据流编写程序的一种极其强大的方式。例如,下面的生成器函数模拟了常用于监控日志文件的UNIX tail -f命令的行为:
import time
def tail(f):
f.seek(0,2) #移动到EOF
while True:
line = f.readline() #尝试读取一个新的文本行
if not line: #如果没有内容,暂时休眠并再次尝试
time.sleep(0.1)
continue
yield line
下面的生成器用于在很多行中查找特定的子字符串
def grep(lines,searchtext):
for line in lines:
if searchline in line :
yield line
将两个生成器合并在一起,创建一个简单的处理管道
#UNIX "tail -f | grep python" 命令的Python实现
wwwlog = tail(open("access-log"))
pylines = grep(wwwlog,"python")
for line in pylines:
print(line)
生成器的微妙之处在于,它经常和其它可迭代的对象(如列表或文件)混合在一起,特别是在编写如 for item in s 这样的语句时,s可以代表项目的列表,文件的港航,生成器函数的结果,或者可支持迭代的其他任何对象。能够在s中插入不同对象,这在创建可扩展程序时发挥巨大的作用。
2.协程
函数运行时要使用一组输入参数,也可以把函数编写为一个任务,从而能处理发送给他的一系列输入。这类函数称为协程,可用yield语句并以表达式yield的形式创建协程
def print_matches(matchtext):
print("Looking for", matchtext)
while True:
line = (yield)
if matchtext in line :
print line
3.语法规则
Python可以使用制表符进行缩进,但并不鼓励这样做。Python编程社区首选的是空格。遇到制表符时,系统会将其转换为移到下一个为8倍数的列所需要的空格量。
要在一行上放置多条语句,可以使用分号隔开各条语句
以一个划线开始的标识符(如_foo)不能使用from module import * 语句导入
前后均有双下划线的标识符(如init)是为特殊方法保留的
前面带有双下划线的标识符(如__bar)则用于实现私有的类成员
如果模块,类或函数定义的第一条语句是一个字符串,该字符串就成为了相关对象的文档字符串
4.装饰器
浙公网安备 33010602011771号