注:资料来源于慕课网Python入门
转载请附上原文地址:http://www.jianshu.com/p/54061dc018c0
上一篇笔记:Python入门笔记(一)
abs(100)
abs(-20)
int('123') # 123
str(1.23) # '1.23'
def my_abs(x):
if x >= 0:
return x
else:
return -x
请注意,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。返回值,函数可以返回多个值 例如
import math
def move(x, y, step, angle):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
实际返回的是一个tuble,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。
定义参数
def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
def average(*args):
sum=0.0
n=0
for x in args:
sum=sum+x
n+=1
if n==0:
return 0.0
return sum/n
print average()
print average(1, 2)
print average(1, 2, 2, 3, 4)
对list切片
取一个list的部分元素是非常常见的操作。对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作。
L[0:3]
#如果第一个索引是0,还可以省略
L[:3]
切片操作还可以指定第三个参数:
L[::2]
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。
第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来,也就是隔一个取一个。
把list换成tuple,切片操作完全相同,只是切片的结果也变成了tuple。
字符串切片
字符串 'xxx'和 Unicode字符串 u'xxx'也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:
def firstCharUpper(s):
first=s[0]
rest=s[1:]
return first.upper()+rest
print firstCharUpper('hello')
print firstCharUpper('sunday')
print firstCharUpper('september')
在Python中,迭代是通过 for ... in 来完成的,而很多语言比如C或者Java,迭代list是通过下标完成的,比如Java代码:
for (i=0; i<list.length; i++) {
n = list[i];
}
Python 的 for循环不仅可以用在list或tuple上,还可以作用在其他任何可迭代对象上。
因此,迭代操作就是对于一个集合,无论该集合是有序还是无序,我们用 for 循环总是可以依次取出集合的每一个元素。
注意: 集合是指包含一组元素的数据结构,我们已经介绍的包括:
1. 有序集合:list,tuple,str和unicode;
2. 无序集合:set
3. 无序集合并且具有 key-value 对:dict
但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
迭代dict的key和value
dict有一个items方法,items() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }
for key, values in d.items():
print key,':',values
和 values() 有一个 itervalues() 类似, items() 也有一个对应的 iteritems(),iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。
>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
写列表生成式时,把要生成的元素 x * x 放到前面,后面跟 for 循环,就可以把list创建出来。print [x*(x+1) for x in range(1,101,2)]
复杂表达式
在生成的表格中,对于没有及格的同学,请把分数标记为红色。
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
def generate_tr(name, score):
if score<60:
return '<tr><td>%s</td><td style="color:red">%s</td></tr>' % (name, score)
return '<tr><td>%s</td><td>%s</td></tr>' % (name, score)
tds = [generate_tr(d) for name, score in d.iteritems()]
print '<table border="1">'
print '<tr><th>Name</th><th>Score</th><tr>'
print '\n'.join(tds)
print '</table>'
字符串可以通过 % 进行格式化,用指定的参数替代 %s。字符串的join()方法可以把一个 list 拼接成一个字符串。
把打印出来的结果保存为一个html文件,就可以在浏览器中看到效果了
条件过滤
列表生成式的 for 循环后面还可以加上 if 判断。例如:我们只想要偶数的平方,不改动 range()的情况下,可以加上 if 来筛选
[x * x for x in range(1, 11) if x % 2 == 0]
请编写一个函数,它接受一个 list,然后把list中的所有字符串变成大写后返回,非字符串元素将被忽略。
def toUppers(L):
return [x.upper() for x in L if isinstance(x,str)]
print toUppers(['Hello', 'world', 101])
多层表达式
for循环可以嵌套,因此,在列表生成式中,也可以用多层 for 循环来生成列表。
>>> [m + n for m in 'ABC' for n in '123']
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
任务
利用 3 层for循环的列表生成式,找出对称的 3 位数。例如,121 就是对称数,因为从右到左倒过来还是 121。
题目要求的写法:
print [x*100+y*10+z for x in range(1,10) for y in range(0,10) for z in range(1,10) if x==z]
简化写法:
print [x*100+y*10+x for x in range(1,10) for y in range(0,10)]
入门笔记记录慕课网学习的Python入门
2024 - 快车库 - 我的知识库 重庆启连科技有限公司 渝ICP备16002641号-10
企客连连 表单助手 企服开发 榜单123