python基础

while boolean_expression:
while_suite
else:
else_suite

else分支为可选部分
只要boolean_expression的结果为True,循环就会执行;
boolean_expression的结果为False时终止循环,此时如果有else分支,则会执行。
break:跳出最内层的循环
continue:跳到所处的最近层循环的开始处
pass:占位语句
else代码块:循环正常终止才会执行,如果循环终止是由break跳出导致的,,else不会执行。

l1 = [1,2,3,4]
while l1:
print l1[0] 升序/ print l1[-1] 逆序
l1.pop(0)

for i in range(1,101)😕/在循环直接生成内存序列,而xrang()用一个值生成一个值
sum += i
print sum

for循环比while循环执行速度快;
python提供两个内置函数,用于在for循环中定制特殊的循环;
rang或xrang
range:一次性返回连续的整数列表
xrange:一次产生一个数据元素,相较于range更节约空间
zip:返回并行的元素元组的列表,常用于在for循环中遍历数个序列
range函数:用于每隔一定的个数元素挑选一个元素 range(0,len(s),2)
zip:并行遍历,取得一个或多个序列为参数,将给定序列中并排的元素配成元组,返回这些元组的列表。
当参数长度不同时,zip会以最短序列的长度为准。
可在for循环中用于实现并行迭代
l1= [1,2,3,4]
l2=[‘a’,‘b’,‘c’,‘d’]
zip(l1,l2) // [(1,‘a’),(2,‘b’),(3,‘c’)]
zip也常用于动态构造字典

动态语言
sys.getrefcount()
增加对象的引用计数场景:
对象创建时:
将对象添加进容器时,类似list.append()
当对象被当作参数传递给函数时:
为对象创建另外变量名
减少引用计数:
引用此对象的某变量名被显式销毁:del x
给引用此对象的某变量名重新赋值
从容器中移除对象时,类似list.pop()
容器本身被销毁
2.if
if boolean_expression:

elif boolean_expression:

else

3.for i in range(1,len(l1),2):
print l1[i]

l3 = [];
for i in l1:
     if i not in l2:
	   l3.append(i)
	  
for i in removelist:
     if i in namelist:
	       namelist.remove(i)

python 迭代:
迭代:重复做一件事
iterable(可迭代)对象
支持每次返回自己所包含的一个成员的对象
对象实现了_iter_方法
序列类型:如:list,str,tuple
非序列类型:如:dict ,file
用户自定义的一些包含了_iter()或_getitem()方法的类

	  可迭代对象:序列:list,str,tuple
	    非序列:dict,file,
		自定义类:
		filelist1 = os.listdir('/var/log')
		
		参数传过来的不是对象本身,是对象副本

l1 = [1,2,3]
def f1(x):
x.pop()
print x

f1(l1[:])

参数传递形式:
位置参数:从左向右
关键字参数:按关键名称匹配
def f7(x,y,z):
print x,y,z

f7(m,n,o) // 3,4,7
f7(x=m,y=n,z=o) // 3,4,7
f7(m,y=n,z=o) // 3,4,7
f7(m,z=o,y=n) // 3,4,7
混用上面两种方式时,所有位置参数,所以的关键字参数
默认参数:有默认值得参数
混用有默认参数和无默认值得参数时,无默认值放前面,有默认值放右边
def f8(x,y,z=9):
print x,y,z
f8(m,n,o) // 3,4,7
f8(m,n) // 3,4,9
可变参数:定义函数时使用*开头的参数,可用于收集任意多基于位置或关键字的参数
def f11(*x):
print x
f10(m)//(3,)
f10(m,n) // (3,4)

def f11(x):
print x
f11(x=1,y=2,z=9) // {‘y’:2,‘x’:1,‘z’:9}
调用函数时使用可变参数要求:
定义函数时使用
:收集位置参数
定义函数时使用
*:收集关键字参数

def f15(*x,**y):
print x
print y
f15(m,n,o,i=3,j=6) //(3,4,7) {‘i’:3,‘j’:6}

l1=[‘sun’,‘mon’,‘tus’]
x,y,z =l1 //变量分解
print x,y,z // sun mom tus

def f17(x,y,z):
print x,y,z
f17(*l2)

d1={‘key1’:‘v1’,‘key2’:‘v2’,‘key3’:77}
def f19(x,*y,**z):
print x
print y
print z
f19(m,*l3,**d1) // 3
//(‘a’,‘b’)
// {‘key3’:77,‘key2’:‘v2’,‘key1’:‘v1’}

位置,任意位置,任意关键字传递
f19(m,n,o,**d1)

匿名函数:表达式
lambda args:expression
lambda x,y:print x,y // print是语句

lambda x,y: x+y

f20(x,y) // 7
匿名函数没有名称,调用时赋予名称
def f20(x,y):
return x+y
f20(3,4) // 7
lambda运算符
lambda args:expression
args:以逗号分隔的参数列表
expression:用到args中各参数的表达式
lambda语句定义的代码必须是合法的表达式,不能出现多条件语句(可使用if的三元表达式)和
其他非表达式语句,如for和while
lambda的首要用途是指定短小的回调函数
lambda将返回一个函数而不是将函数赋值给某变量名

注意:lambda是一个表达式而非语句;lambda是一个单个表达式,而不是一个代码块

def 语句创建的函数将赋值给某变量名,而lambda表达式则直接返回函数
f20 = lambda x,y:x+y
python函数式编程
filter()为已知的序列的每个元素调用给定的布尔函数,
调用中,返回值为非零值的元素将被添加至一个列表中
filter(f1,l1)// [34,56]
map()将函数调用“映射”到每个序列的对应元素上并返回一个含有所有返回值的列表
l1= [0,1,2,3,4,5,6]
l2=[‘sun’,‘m’,‘w’,‘t’,‘f’,‘s’]
map(None,l1,l2)//[(0,‘sun’),(1,‘m’),(2,‘w’),(3,‘t’),’(4,‘f’),(5,‘s’),(6,‘None’)]
map(f3,l1)
def f3(x):
return x*2
reduce
def f5(x,y):
return x+y

l1 = [0,1,2,3,4,5,6]
reduce(f5,l1) // 21
npm config set proxy null
python函数闭包及装饰器
def f1(x):
def f2(y):
return y**x
return f2
f1(4) // function_main_.f2
f3 =f1(3)
type(f3)//function

f3(2) //8
f3(3)// 27
f3(4)//64

for i in (i**2 for j in range(1,11)):
print i // 1,4,9,16,25,36,49,64,81,100

yeild 和生成器 43
由生成器转为列表
list((i**2 for i in range(1,11))) //[1,4,9,16,25,36,49,64,81,100]
yield关键字是 一个生成器,暂停一下
返回一个生成器对象
函数中使用yield,会返回一个生成器对象,
装饰器:
1.装饰器本身是一个函数,用于装饰其他函数;
2.功能:增强被装饰器函数的功能
装饰器一般接受一个函数对象作为参数,以对其进行增强
递归:(一个函数的内部包含了对自己的调用)
递归需要边界条件,递归前进段和递归返回段
def fact(n):
if n <=1 return 1
else :return nfact(n-1)
fact(3) === 3
fact(2) = 3* 3fact(1)= 32*1
fact(3) // 6

函数的设计规范:
耦合性:
(1)通过参数接受输入,以及通过return产生输出以保证函数的独立性
(2)尽量减少使用全局变量进行函数间通信
(3)不要在函数中修改可变类型的参数
(4)避免直接改变定义在另外一个模块的变量
聚合性:
(1)每个函数都应该有一个单一的,统一的目标
(2)每个函数的功能都应该相对简单
类:将同一种具体事物的共同特性抽象出来的表现。
状态和转换这些状态的操作
数据:
变量:就是属性
方法:
函数:操作变量引用的数据的代码

模块
一个文件被看作一个独立的模块,一个模块也可以被看作是一个文件
模块的名称就是模块的文件名
每个模块都有自己的名称空间
在一个模块的顶层定义的所有变量都在被导入时成为了被导入模块的属性
类和函数都是可调用对象 def语句会执行但是def内部语句不会执行

在导入模块时只能使用模块名,而不能使用带.py后缀的模块文件名。
import语句:
导入指定的整个模块,包括生成一个以模块名命名的名称空间
建议import语句只导入一个模块
from-import语句:
from random import choice,randint,random
常用于只导入指定模块的部分属性至当前名称空间

import和from-import是赋值语句
import和from是可执行语句,类似于def,因此,它们可以嵌套在if测试中,出现于def中等等
python执行到这些语句时才会对其进行解析,这意味着,所有来自模块的属性仅在import语句执行后才能使用。
import和from都是隐性赋值语句
import将整个模块对象赋值给一个变量名
from将一个或多个变量名赋值给导入此模块的模块中的同名对象
模块就是名称空间
模块的名称空间可以通过属性_dict_或dir()获取
模块属性可通过点号(.)运算符获取,格式:m.attr
模块时一个独立的作用域

import的工作机制
import语句导入指定的模块时会执行三个步骤:
1.找到模块文件
在指定的路径下搜索模块文件
2.编译成字节码
文件导入时就会编译,因此,顶层文件的.pyc字节码文件在内部使用后会被丢弃,只有被导入的文件才留下.pyc文件
3.执行模块的代码来创建其所定义的对象
模块文件中的所有语句会依次执行,从头到尾,而此步骤中任何对变量名的赋值运算,都会产生所得到的模块文件的属性
注意:模块只在第一次导入时才会执行如上步骤
后续的导入操作只不过是提取内存中已加载的模块对象
reload()可用于重新加载模块

第一次才会执行一次
要重新执行一次只能reloadc重新加载执行import

使用distutils发布模块
distutils模块能够帮助安装
python模块,扩展和应用程序可以按以下几种形式进行打包和发布
压缩文件(使用distutils)
windows的zip文件和类Unix平台的.tar.gz文件
自动解包或自动安装可执行文件
windows中的.exe文件
自包含的,不要求安装的预备运行可执行程序
windows的.exe文件,unix上带有一个小的脚本前缀zip压缩文件,mac上的.app文件等
平台相关的安装程序
windows上的.msi文件,linux上常见的.rpm,src.rpm和.dep文件
python eggs
较流行的第三方扩展

python setup.py sdist 打包生成tar.gz结尾的文件
python setup.py build 编译安装install
tar xf pkg.tar.gz 解压
print sys.path
python setup.py --help-commands 查询有哪些命令
获取帮助的方式:python setup.py --help

keyError,nameError,IndexError
ZeroDivisionError
doctest.testmod(mymod)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值