python复制上一条语句_python基本操作

4, 条件表达式(即"三元操作符")

三元运算符语法为:X if C else Y,只需要一行完成条件判断和赋值操作:

>>> x, y = 4, 3

>>> smaller = x if x < y else y

>>> smaller3

1、if语句

2、else语句

3、elif (即else-if )语句

5、while语句

6、for语句

它会自动地调用迭代器的next()方法,捕获StopIteration异常并结束循环(所有这一切都是在内部发生的)

使用项和索引迭代

>>> nameList = ['Donn', 'Shirley', 'Ben', 'Janice','David', 'Yen', 'Wendy']

>>> for i, eachLee in enumerate(nameList):

... print "%d %s Lee" % (i+1, eachLee)

...

1 Donn Lee

2 Shirley Lee

3 Ben Lee

4 Janice Lee

5 David Lee

6 Yen Lee

7 Wendy Lee

通过序列索引迭代

>>> nameList = ['Cathy', "Terry", 'Joe', 'Heather','Lucy']

>>> for nameIndex in range(len(nameList)):

... print "Liu,", nameList[nameIndex]

...

Liu, Cathy

Liu, Terry

Liu, Joe

Liu, Heather

Liu, Lucy

通过序列项迭代

>>> nameList = ['Walter', "Nicole", 'Steven', 'Henry']

>>> for eachName in nameList:

... print eachName, "Lim"

...

Walter Lim

Nicole Lim

Steven Lim

Henry Lim

lambda

Python用于支持将函数赋值给变量的一个操作符 默认是返回的,所以不用再加return关键字,不然会报错

result = lambda x: x * x

result(2) # return 4

map()/filter()/reduce()

需要两个参数,第一个是一个处理函数,第二个是一个序列(list,tuple,dict)

map()

将序列中的元素通过处理函数处理后返回一个新的列表

filter()

将序列中的元素通过函数过滤后返回一个新的列表

reduce()

将序列中的元素通过一个二元函数处理返回一个结果

将上面三个函数和lambda结合使用

li = [1, 2, 3, 4, 5]

# 序列中的每个元素加1

map(lambda x: x+1, li) # [2,3,4,5,6]

# 返回序列中的偶数

filter(lambda x: x % 2 == 0, li) # [2, 4]

# 返回所有元素相乘的结果

reduce(lambda x, y: x * y, li) # 1*2*3*4*5 = 120

sorted() 结合lambda对列表进行排序

sorted 用于列表的排序,比列表自带的更加智能 有两个列表,每个列表中都有一个字典([{},{}])要求将两个这样的列表合并后按照时间排序, 两个列表中的时间为了能够通过json输出已经由时间格式转变为字符串格式.字段名为 sort_time 现在将他们按照倒序排列

sorted 的用法

sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list terable:是可迭代类型; cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项; key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项; reverse:排序规则. reverse = True 或者 reverse = False,有默认值。 * 返回值:是一个经过排序的可迭代类型,与iterable一样。

sorted()结合lambda对可迭代类型用sort_time排序

sorted(data, key=lambda d: d['sort_time'], reverse=True)

赋值语句就像 A = B = 0,Python支持链式赋值。 (Python不是C)

lambda是一个用来构造回调的工具

1square_root=lambdax:math.sqrt(x)

下面是lambda的其他的一些有趣的例子:

Python

1

2

3sum=lambdax,y:x+y#  def sum(x,y): return x + y

out=lambda*x:sys.stdout.write(" ".join(map(str,x)))

lambdaevent,name=button8.getLabel():self.onButton(event,name)

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18def__init__(self,parent):

"""Constructor"""

frame=tk.Frame(parent)

frame.pack()

btn22=tk.Button(frame,

text="22",command=self.buttonCmd22)

btn22.pack(side=tk.LEFT)

btn44=tk.Button(frame,

text="44",command=self.buttonCmd44)

btn44.pack(side=tk.LEFT)

defbuttonCmd22(self):

self.printNum(22)

defbuttonCmd44(self):

self.printNum(44)

这样写更容易(且更清楚)

Python

1

2

3

4

5

6

7

8

9

10

11

12def__init__(self,parent):

"""Constructor"""

frame=tk.Frame(parent)

frame.pack()

btn22=tk.Button(frame,

text="22",command=lambda:self.printNum(22))

btn22.pack(side=tk.LEFT)

btn44=tk.Button(frame,

text="44",command=lambda:self.printNum(44))

btn44.pack(side=tk.LEFT)

1

2lambda:aifsome_condition()elseb

lambdax:‘big’ifx>100else‘small’

lambda只执行一条语句

必须要有返回值

lambda 参数:执行语句(有返回值)迭代器

7、break和continue语句

8、pass语句

9、迭代器和iter()函数

迭代器是一个概念,只要python中一个对象符合迭代器类型,就可以迭代

迭代器有一个next()方法的对象,而不是通过索引来计数

>>> myTuple = (123, 'xyz', 45.67)

>>> i = iter(myTuple)

>>> i.next()

123

>>> i.next()

'xyz'

>>> i.next()

45.670000000000002

>>> i.next()

Traceback (most recent call last):

File "", line 1, in

StopIteration

reversed()内建函数将返回一个反序访问的迭代器

10、列表解析

Python支持的函数式编程特性

列表解析的语法:[expr for iter_var in iterable], 它迭代iterable对象的所有条目。其中的expr应用于序列的每个成员,最后的结果值是该表达式产生的列表,迭代变量并不需要是表达式的一部分。

还提供了一个扩展版本的语法:[expr for iter_var in iterable if cond_expr],它在迭代时会过滤/捕获满足条件表达式cond_expr的序列成员。

>>> [x ** 2 for x in range(6)]

[0, 1, 4, 9, 16, 25]

>>> seq = [11, 10, 9, 9, 10, 10, 9, 8, 23, 9, 7, 18, 12, 11, 12]

>>> filter(lambda x: x % 2, seq)

[11, 9, 9, 9, 23, 9, 7, 11]

>>> [x for x in seq if x % 2]

[11, 9, 9, 9, 23, 9, 7, 11]

矩阵样例:迭代一个有三行五列的矩阵,[(x+1,y+1) for x in range(3) for y in range(5)]。

磁盘文件样例:若有一个数据文件text.txt,需要计算出所有非空白字符的数目,可以把每行分割( split )为单词,,然后计算单词个数:>>> f = open('hhga.txt', 'r');len([word for line in f for word in line.split()])。快速地计算文件大小:>>>import os;os.stat('text.txt').st_size。把每个单词的长度加起来:>>>f.seek(0);sum([len(word) for line in f for word in line.split()])。

生成器表达式

生成器表达式是列表解析的一个扩展,只用一行代码就可以创建包含特定内容的列表

[expr for iter_var in iterable if cond_expr]

生成器表达式语法:

(expr for iter_var in iterable if cond_expr)

\  为python可以接着下一行写的符号

配置templates需要在settings.py里面的

TEMPLATES = [

'DIRS':[os.path.join(BASE_DIR,'templates')],

]

and-or技巧

bool ? a : b表达式熟悉,这个表达式当bool为真时计算为a,其它值则为b。

>>>a = "first">>>b = "second">>>1 and a or b

'first'>>>0 and a or b

'second'

与C表达式 bool ? a : b类似,但是bool and a or b,当 a 为假时,不会象C表达式 bool ? a : b 一样工作应该将 and-or 技巧封装成一个函数:

defchoose(bool, a, b):return (bool and [a] or [b])[0]

>>>a = "">>>b = "second">>>(1 and [a] or [b])[0]

>>>a = "">>>b = "second">>>1 and a or b'second'

因为 a 是一个空串,空串在一个布尔环境中被Python看成假值,这个表达式将“失败”,且返回 b 的值。如果你不将它想象成象 bool ? a : b 一样的语法,而把它看成纯粹的布尔逻辑,这样的话就会得到正确的理解。 1 是真,a 是假,所以 1 and a 是假。假 or b 是b。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值