标签:程序 opera 全局变量 listdir 作用 directory lambda函数 ams rmdir
函数就是完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给它取一个名字。
可以通过函数名在程序的不同地方多次执行(这通常叫做函数调用),却不需要在所有地方都重复编写这些语句。
当我们自己定义一个函数时,通常使用def语句,其语法形式如下所示:
def 函数名 (参数列表): #可以没有参数函数体
def add(a, b):
print a + b
调用函数的一般形式是:
函数名(参数列表)
add(1, 2)
在定义函数时函数后面圆括号中的变量名称叫做“形式参数”,或简称为“形参”
在调用函数时,函数名后面圆括号中的变量名称叫做“实际参数”,或简称为“实参”
默认参数只能从右至左给定,如果需要第一个参数给默认值,其他参数不给,那么把第一个参数移到最后一个即可。
def add(a, b = 2):
print a + b
add(3) #result : 5
Python中的任何变量都有其特定的作用域。
在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称之为局部变量。
在一个文件顶部定义的变量可以供该文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量。
x = 100 #全局变量,可以在文件任何地方调用
def func():
x = 200 #局部变量,只能在函数内部调用
print x
func() #输出200
print x #输出100
强制声明为全局变量
x = 100
def func():
global x #强制声明x为全局变量,导致值被覆盖
x = 200
func()
print x #输出200
函数被调用后会返回一个指定的值
函数调用后默认返回None
return返回值
返回值可以是任意类型
return执行后,函数终止
区分返回值和打印
def add(a, b):
return a + b
ret = add(1, 2) #将函数返回结果赋值给变量ret
print ret #输出3
func (*args)
def func(x, y):
print x, y
t = (1, 2)
func(*t)
func (**kw)
def func(name=‘jack‘, age=30):
print name,age
d = {‘age‘: 22, ‘name‘ : ‘mike‘};
func(**d)
def func(*args, **kw)
def func(x, *args, **kw):
print x
print args
print kw
func(1, 2, 3, 4, 5, y=10, z=20)
#输出
1
(2, 3, 4, 5)
{‘y‘: 10, ‘z‘: 20}
lambda函数是一种快速定义单行的最小函数,是从Lisp借用来的,可以用在任何需要函数的地方。
lambda x,y:x*y
使用lambda在某些时候让代码更容易理解。
lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。lambda语句构建的其实是一个函数对象
g = lambda x:x**2
print g
<function <lambda> at 0x0000000002643A58>
reduce为逐次操作list里的每项,接收的参数为2个,最后返回的为一个结果。
sum = reduce(lambda x,y:x*y, range(1,6))
print sum
通过字典调用函数
def add(a, b):
return a + b
def sub(a, b):
return a - b
def mul(a, b):
return a * b
def div(a, b):
return a / b
operator = {‘+‘: add, ‘-‘: sub, ‘*‘: mul, ‘/‘: div} #通过字典实现switch语句的功能
def calc(a, o, b):
return operator.get(o)(a, b)
print calc(4, ‘+‘, 2)
print calc(4, ‘-‘, 2)
print calc(4, ‘*‘, 2)
print calc(4, ‘/‘, 2)
help(range)
#输出结果
Help on built-in function range in module __builtin__:
range(...)
range(stop) -> list of integers
range(start, stop[, step]) -> list of integers
Return a list containing an arithmetic progression of integers.
range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.
When step is given, it specifies the increment (or decrement).
For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!
These are exactly the valid indices for a list of 4 elements.
abs(number)
: 绝对值max(iterable[, key=func])
: 最大值min(iterable[, key=func])
: 最小值len(collection)
: 取得一个序列或集合的长度divmod(x, y)
: 求两个数的商和模,返回一个元组(x//y, x%y)pow(x, y[, z])
: 求一个数的幂运算round(number[, ndigits])
: 对一个数进行指定精度的四舍五入callable(object)
: 判断一个对象是否可调用isinstance(object, class-or-type-or-tuple)
:判断对象是否为某个类的实例cmp(x, y)
: 比较两个数或字符串大小range(start [,stop, step])
: 返回一个范围数组,如range(3), 返回[0,1,2]xrange(start [,stop, step])
: 作用与range相同,但是返回一个xrange生成器,当生成范围较大的数组时,用它性能较高type()
type(object) -> the object‘s type
type(name, bases, dict) -> a new type
int()
int(x=0) -> int or long
int(x, base=10) -> int or long
long()
long(x=0) -> long
long(x, base=10) -> long
float()
float(x) -> floating point number
complex()
complex(real[, imag]) -> complex number
str()
str(object=‘‘) -> string
list()
list() -> new empty list
list(iterable) -> new list initialized from iterable‘s items
tuple()
tuple() -> empty tuple
tuple(iterable) -> tuple initialized from iterable‘s items
hex()
hex(number) -> string
oct()
oct(number) -> string
chr()
chr(i) -> character
ord()
ord(c) -> integer
str.capitalize()
>>> s = "hello"
>>> s.capitalize()
‘Hello‘
str.replace()
>>> s = "hello"
>>> s.replace(‘h‘, ‘H‘)
‘Hello‘
str.split()
>>> ip = "192.168.1.123"
>>> ip.split(‘.‘)
[‘192‘, ‘168‘, ‘1‘, ‘123‘]
len()
>>>l = range(10)
>>> len(l)
10
max()
>>>l = range(10)
>>> max(l)
9
min()
>>>l = range(10)
>>> min(l)
0
filter()
>>>l = range(10)
>>> filter(lambda x: x>5, l)
[6, 7, 8, 9]
zip()
>>> name=[‘bob‘,‘jack‘,‘mike‘]
>>> age=[20,21,22]
>>> tel=[131,132]
>>> zip(name, age)
[(‘bob‘, 20), (‘jack‘, 21), (‘mike‘, 22)]
>>> zip(name,age,tel)
[(‘bob‘, 20, 131), (‘jack‘, 21, 132)] #如果个数不匹配会被忽略
map()
>>> map(None, name, age)
[(‘bob‘, 20), (‘jack‘, 21), (‘mike‘, 22)]
>>> map(None, name, age, tel)
[(‘bob‘, 20, 131), (‘jack‘, 21, 132), (‘mike‘, 22, None)] #个数不匹配时,没有值的会被None代替
>>> a = [1,3,5]
>>> b = [2,4,6]
>>> map(lambda x,y:x*y, a, b)
[2, 12, 30]
reduce()
>>> reduce(lambda x,y:x+y, range(1,101))
5050
map的例子,可以写成
print map(lambda x:x*2+10, range(1,11))
print [x*2+10 for x in range(1,11)]
非常的简洁,易懂。filter的例子可以写成:
print filter(lambda x:x%3==0, range(1,11))
print [x for x in range(1,11) if x%3 == 0]
__init__.py
文件import pack.m1, pack.m2, pack.m3
items.py
的脚本,则可在另外一个脚本中用import items
语句来导入它__init__.py
文件存放了包的信息可以用import, import as, from import
等语句导入模块和包
#假设有一个模块名为calc.py
import calc
import calc as calculate
from calc import add
元字符
. ^ $ * + ? {} [] \ | ()
[]
[abc] [a-z]
[akm$]
补集匹配不在区间范围内的字符:[^5]
import re
regExp = r‘t[0-9]p‘
print re.findall(regExp, ‘t1p t2p‘)
^
$
\
也可以用于取消所有的元字符:\[
或\\
\d 匹配任何十进制数,它相当于[0-9]
\D 匹配任何非数字字符,它相当于[^0-9]
\s 匹配任何空白字符,它相当于[\t\n\r\f\v]
\S 匹配任何非空白字符,它相当于[^\t\n\r\f\v]
\w 匹配任何字母数字字符,它相当于[a-zA-Z0-9]
\W 匹配任何非字母数字字符,它相当于[^a-zA-Z0-9]
*
+
?
{m,n}
m
和n
是十进制整数。该限定符的意思是至少有m个重复,至多到n个重复{0,}
等同于*
,{1,}
等同于+
,而{0,1}
则与?
相同。如果可以的话,最好使用*
,+
或?
re
模块提供了一个正则表达式引擎的接口,可以让你将REstring编译成对象并用它们来进行匹配编译正则表达式
>>> import re
>>> p = re.compile(‘ab*‘)
>>> print p
<_sre.SRE_Pattern object at 0x00000000004D1CA8>
re.compile()
也可以接受可选择的标志参数,常用来实现不同的特殊功能和语法变更
p = re.compile(‘ab*‘, re.IGNORECASE)
"r"
反斜杠就不会被任何特殊方式处理字符 | 阶段 |
---|---|
\section | 要匹配的字符串 |
\section | 为re.compile取消反斜杠的特殊意义 |
"\\section" | 为"\section"的字符串实值(string literals)取消反斜杠的特殊意义 |
方法/属性 | 作用 |
---|---|
match() | 决定RE是否在字符串刚开始的位置匹配 |
search() | 扫描字符串,找到这个RE匹配的位置 |
findall() | 找到RE匹配的所有子串,并把它们作为一个列表返回 |
finditer() | 找到RE匹配的所有子串,并把它们作为一个迭代器返回 |
如果没有匹配到的话,match()和search()将返回None。
如果成功的话,就会返回一个‘MatchObject‘实例。
方法/属性 | 作用 |
---|---|
group() | 返回被RE匹配的字符串 |
start() | 返回匹配开始的位置 |
end() | 返回匹配结束的位置 |
span() | 返回一个元组包含匹配(开始,结束)的位置 |
实际程序中,最常见的作法是将‘MatchObject‘保存在一个变量里,然后检查它是否为None
p = re.compile(‘ab*‘, re.I)
m = p.match(‘aaaabcccccabcc‘)
if m:
print ‘Match found : ‘, m.group()
else:
print ‘No match‘
match()、search()、sub()、subn()、split()、findall()
等dir(re)
标志 | 含义 |
---|---|
DOTALL, S | 使.匹配包括换行在内的所有字符 |
IGNORECASE, I | 使匹配对大小写不敏感 |
LOCALE, L | 做本地化识别(local-aware)匹配.法语等 |
MULTILINE, M | 多行匹配,影响^和$ |
VERBOSE, X | 能够使用REs的verbose状态,使之被组织得更清晰易懂 |
charref = re.compile(r"""
(
[0-9]+[^0-9] #Decimal form
| 0[0-7]+[^0-7] #Octal form
| x[0-9a-fA-F]+[^0-9a-fA-F] #Hexadecimal form
)
""", re.VERBOSE)
email = r"\w+@\w+(\.com|\.cn)"
下载贴吧或空间中所有图片
import re
import urllib
def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html
def getImg(html):
reg = r‘src="(.*?\.jpg)" width‘
imgre = re.compile(reg)
imglist = re.findall(imgre, html)
x = 0
for imgurl in imglist:
urllib.urlretrieve(imgurl, ‘%s.jpg‘ % x)
x++
getImg(getHtml(url))
解释一个例子:
import copy
a = [1,2,3,[‘a‘,‘b‘,‘c‘]]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
open
或file
file_handle = open(filename, mode)
模式 | 说明 |
---|---|
r | 只读 |
r+ | 读写 |
w | 写入,先删除原文件,在重新写入,如果文件没有则创建 |
w+ | 读写,先删除原文件,在重新写入,如果文件没有则创建(可以写入输出) |
a | 写入,在文件末尾追加新的内容,文件不存在,创建之 |
a+ | 读写,在文件末尾追加新的内容,文件不存在,创建之 |
b | 打开二进制文件。可以与r、w、a、+结合使用 |
U | 支持所有的换行符号。"\r"、"\n"、"\r\n" |
FileObject.close()
String = FileObject.readline([size])
List = FileObject.readlines([size])
String = FileObject.read([size])
FileObject.next()
FileObject.write(string)
FileObject.writelines(List)
FileObject.seek(偏移量,选项)
FileObject.flush()
cat a.txt
hello world
hello hello world
统计文件中hello的个数
import re
fp = file("a.txt", "r")
count = 0
for s in fp.readlines():
li = re.findall("hello", s)
if len(li) > 0:
count = count + len(li)
print "Search ",count," hello"
fp.close()
示例代码一:
fp1 = file("a.txt", "r")
fp2 = file("b.txt", "w")
for s in fp1.readlines():
fp2.write(s.replace("hello", "good"))
fp1.close()
fp2.close()
示例代码二:
fp1 = file("a.txt", "r")
fp2 = file("b.txt", "w")
s = fp1.read()
fp2.write(s.replace("hello", "good"))
fp1.close()
fp2.close()
import os
os.mkdir(‘/root/demo‘)
函数 | 说明 |
---|---|
mkdir(path[,mode=0777]) | 创建单个目录 |
makedirs(name,mode=511) | 创建多层级目录 |
rmdir(path) | 删除单个目录 |
removedirs(path) | 删除多层级目录 |
listdir(path) | 列出目录 |
getcwd() | 取得当前目录 |
chdir(path) | 切换目录 |
walk(top, topdown=True, onerror=None) |
os.walk()
函数
os.walk(path)
该函数返回一个元组,该元组有3个元素,这3个元素分别表示每次遍历的路径名,目录列表和文件列表。
for path, dirlist, filelist in os.walk(‘.‘):
for filename in filelist:
print os.path.join(path, filename)
异常抛出机制,为程序开发人员提供了一种在运行时发现错误,进行恢复处理,然后继续执行的能力。下面是一个异常处理实例:
try:
f = open(‘unfile.py‘, ‘r‘)
except IOError, e:
print False,str(e)
False [Errno 2] No such file or directory: ‘unfile.py‘
python提供try-finally子句来表述这样的情况:我们不关心捕捉到是什么错误,无论错误是不是发生,这些代码“必须”运行,比如文件关闭,释放锁,把数据库连接还给连接池等。比如:
try:
f = open(‘unfile.py‘, ‘r‘)
except Exception, e:
print False,str(e)
finally:
print "exec finally"
使用raise来抛出一个异常:
if ‘a‘ > 5:
raise TypeError("Error: ‘a‘ must be integer.")
异常 | 描述 |
---|---|
AssertionError | assert语句失败 |
AttributeError | 试图访问一个对象没有的属性 |
IOError | 输入输出异常,基本是无法打开文件 |
ImportError | 无法引入模块或者包,基本是路径问题 |
IndentationError | 语法错误,代码没有正确的对齐 |
IndexError | 下标索引超出序列边界 |
KeyError | 试图访问你字典里不存在的键 |
KeyBoardInterrupt | Ctrl+C被按下 |
NameError | 使用一个还未赋予对象的变量 |
SyntaxError | python代码逻辑语法出错,不能执行 |
TypeError | 传入的对象类型与要求不符 |
UnboundLocalError | 试图访问一个还未设置的全局变量,基本上是由于另有一个同名的全局变量,导致你以为在访问 |
ValueError | 传入一个不被期望的值,即使类型正确 |
标签:程序 opera 全局变量 listdir 作用 directory lambda函数 ams rmdir
原文地址:http://www.cnblogs.com/lqylqy/p/7302415.html