设为首页 收藏本站
查看: 789|回复: 0

[经验分享] Python Totorial入门指南 笔记 :5

[复制链接]

尚未签到

发表于 2017-5-3 10:06:05 | 显示全部楼层 |阅读模式
在Window xp上,需要在环境变量上,在path节点中添加python安装路径,这点与其他语言的环境设置相同

在命令行交互式编程中,尤其注意空格的时候,Python中变成没有使用{}块来划分代码,代替使用的是4个空格
,注意不能使用tab,因为考虑到跨平台的原因,在linux下,tab是4个空格,win下代表2个空格.

第一章大多是Python解释器的配置和简单实用,如果有专门的IDE,略过


流程控制相关

if...elif...else 流程

if x<2:  //注意:符号
    print 3 //注意开头4个空格
elif x>3:
    print 4 //同上


for循环,类似Java 5中的 for(type t : ts)一样,遍历对象中的子对象,如数组中的对象

a=['a','b',1]
for x in a:   //注意:
    print x,len(x) //注意,分隔多个方法

//上面代码将会出错,因为1是int,不能使用len方法,

在迭代过程中改变迭代序列是不安全的,可以使用
for x in a[:]: 进行代替原先的循环

如果需要一个数字的序列,可以使用内置函数 range(),通过传入不同的参数,生成不同的序列

range(10) //10表示 0-9
range(起点,最大值不超过,每次增加值(步进值))

可以使用-负数进行反向递减,不过注意 如果第三个参数无效(如:0),那么将返回[],或者抛出异常

使用range配合for用于迭代循环
a=['a','v','c']
for i in range(len(a)):
print a

//很好的想法,也比较古怪.



break,continue语句,以及循环中else语句

break的使用和Java中的相同,用于跳出循环. continue功能也相同,表示继续执行下次循环

else的使用比较特殊一些,能够在for与while循环后使用,表示在循环结束后,再执行else语句块内容,不过如果

break,将不会执行该else方法.

pass语句: 用于表示什么也不做的情况,在一些情况不加语句会出错,那时候就要用到pass

def 语句:用于定义方法函数
def fib(n):  //注意:
    print n;

一般函数第一行定义的为'''的字符串类型,类似JavaDoc,称为docstring

全局函数无法直接在函数中被修改,除非使用global命名

如果函数本身没有直接的return 返回值,那么将会返回None,也称为过程返回

[]列表的append方法用于添加一个对象,类似result = result+,不过效率更高一些

默认参数值的使用,定义的格式如下,注意没有默认值的参数必须传入
def ask_ok(prop,ret=4):  //使用:

in 关键字,判断一个值是否在指定的序列中,如:
if ok in('a','b','c')

默认情况下,默认参数值将会在多个函数调用中进行保存,如
def fib(m,n=[]):
    n.append(m)
    return n
每次调用后 n的值将会被保存

如果想要不保存,需要进行如下修改
def fib(m,n=None):
    if n is None:
        n=[]
    n.append(m)
    print m
    return n
使用None代替默认参数的[]

这里还涉及到了==判断,使用 is代替==判断对象类型

可以在方法调用中,以key=value的方式传入参数,如:
fib(m=1,n=0)  //注意这里声明的变量并不能直接在外部使用

使用上述方式,注意key不能重复,不过参数的顺序可以自由改变

在参数中还有两种常用的形式,1: *arg , 2: **keyword;
第二种用于接收在参数中用key=value形式的值,当不是原有参数中的参数名为key的参数
第一种由于接收直接使用值的参数

其中*要放在**之前,这种用法比较奇怪一些,不过不建议两种*和**一起使用.
*将会被转换成元祖,而**将会被转换成字典(key=value)

可变参数列表--就是使用上面所说的*,将所有而外的参数转换成元组

同样,可以使用*与** 将序列或元组拆开,例子比较特殊一些,需要同时在方法定义时,和方法调用时使用*
def split(*arg):
    for x in arg: print x+1
c=[1,2,3,4]
split(*c)

使用**时,需要注意字典的定义格式
c={'a':1,'b':2}

Lambda形式的使用
f=lambda c,d:c+d
print f(1,2)

可以用于参数的return 返回,然后进行赋值

文档字符串的编写: docstring

第一行 用于简短的描述对象的用途,以句号结尾,首字符大写.
第二行 应该空出来,而且第二行开始留出空白缩减,一般以8个空格为标准
第三行 描述对象的调用约定与边际效应



数据结构

链表的常用方法
1:添加
append(x),等同于a[len(a):]=[x]

2:继承,获取所有的元素
extend(L),等同于a[len(a):] = L

3:count(x)
返回x在链表中出现的次数

其他大多方法与Java中类似,详情查看API文档

可以灵活的配置带参数的pop和append实现队列和栈的效果


函数化编程工具---使用链表的内置函数 filter(),map(),和reduce()

filter(function,sequence),返回一个序列,包括了给定function(item)都为true的元素 如:

def f(x):
    if x>10:return False
    else:return True
print filter(f, range(0,20))

map(function,sequence)将每个元素依次调用function(item),并将返回值组成一个链表返回

def f(x):
     return x*x
print map(f, range(0,10))

reduce(function,sequence),调用顺序,将序列的前两个值传入,然后返回值与第三个传入.依次执行.

def f(x,y):
     return x+y
print reduce(f, range(0,10))

注意如果序列只有一个值,将返回该值,如果序列为空,那么将会抛出异常
可以传入第三个参数,作为初始值

也可以简单的使用sum代替

链表推导式
使用[]包含一个或多个for与if的语句,用于从一个基[]链表生成一个新的链表,如果要返回tuple元组,需要加

上()
如:
a=[1,2,3,4,5,6,7,8]
print [c for c in a if c<5]
print [(c,c+1) for c in a if c<5]

链表推导式可以用于生成很复杂的链表

del语句,用于从链表中移除指定索引的元素,与pop()方法不同,可以移除指定区间的元素

a=[1,2,3,4,5,6,7,8]
del a[1:3]   //将会移除2和3,表示移除从索引1开始移除到索引3之前的元素
可以使用0,空,负数.注意效果均有不同.
也可以直接删除整个变量

元组()与序列[]
定义时,序列可以不使用[],只要使用,进行分隔,而元组则必须使用()
两种的区别之一:元组的元素不可修改

定义一个单元素元组的方式 (a,); 注意,是必须的


Sets集合,是一个无须不重复的元素的集,基本功能包括关系测试和消除重复元素,还包括联合,交,差,对称差集

等数学运算
如:
a=[1,2,3,4,5,2,3,8]
print set(a)

可以使用简单的方法,将序列转换成集合
b='1234556'  //单双引号均可
print set(b)

字典 Dictionaries
key-value的形式, 关键字可以为任何不可变的类型,元组如果不包含可变对象,也可以作为key使用
创建一个空字典的方式{}
常用方法: del,  tel.keys()  tel.haskey('jk')  'jk' in tel等
tel={'jk':123,'ob':233}
print tel['jk']

dict方法可以从元组组成的链表中生成字典对象,也可以使用推导式的生成字典
print dict([('1',2),('2',4)])

c=[1,2,3,5]
print [(x,x*2) for x in c if x>=2]

还有另外一种使用dict转换的方式,也比较常用
print dict(a=3,b=4,e=5);


循环技巧

1:在字典循环的时候,可以使用iteritems()同时读出来

obj=dict(a=3,b=4,e=5);
for k,j in obj.iteritems():
    print k,j

在for循环中,也可以使用enumerate()在循环链表的同时,输出所在索引和值
for i,v in enumerate(["1","2","3"]):
    print i,v

同时循环2个或者多个序列,可以使用zip()整理解读
a=["1","2","3",'ds'];
b=['a','b','c','ds']
for i,v in zip(a,b):
    print i,v

注意:如果索引数量不对,那么将会自动忽视掉多余的索引

反向循环序列,可以使用reversed修饰序列对象

a=["1","2","3",'ds'];
for i in reversed(a):
    print i
注意:并不会修改原序列对象

排序输出 sorted
a=["1","3","2",'ds'];
for i in sorted(a):
    print i
同样是生成一个新的序列返回,并不会修改原序列


深入条件控制

in 和 not in可以判断值是否在一个区间之内, is和is not来比较两个对象是否相同,注意比较操作符的优先

级低于所有的数值操作

可以传递的比较操作符
c<b==a 判断c小于b 并且b==a
如1<2==2

逻辑操作符 可以使用 and和or组合, not关键字用于取反义,这些操作符的优先级低于比较操作符,其中
not的优先级最高 or的优先级最低

逻辑操作符 and 和or也称为短路操作符,参数从左向右解析,一旦确认结果就停止.

上述比较的结果可以赋值给变量


链表可以直接使用比较符进行比较.
一个链表(list)总是小于一个字符串,一个字符串(string)总是小于一个元组(tuple),数组比较时,会统一他们

的类型,如果0==0.0

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-372419-1-1.html 上篇帖子: 两个不错的Python Fetion的东西 下篇帖子: Dave Python 练习十七 -- 正则表达式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表