首页
课程
计算机
经济管理
外语
大学先修课
社科/法律
文学
创业
更多其他课程
院校
微学位
学堂云
雨课堂
APP下载
课程
广场
App下载
雨课堂
登录
注册
登录
讨论区
讨论详情
【暑期班】计算机科学和Python编程导论
龙永康
2016-08-31 21:39:53
#解决中文编码:
Import sys
reload(sys)
sys.setdefaultencoding(
'utf8'
)
cmp(x,y), x<y retun -
1
,==
0
, >
1
#判断类型:isinstance('abc', str) = Ture
类型转换:
>>> int(
'123'
)
>>> int(
12.34
)
>>> float(
'12.34'
)
>>> str(
1.23
)
>>> unicode(
100
)
>>> bool(
1
)
>>> bool(
''
)
a = abs,a 指向函数
a(-
1
) =
1
#数据类型:
#整形,浮点,字符串,布尔(Ture,False) a='abc',a.replce(‘a’,'A')是创建一个新的字符串反回
#运算符:and,or,not
#集合类型:
#1,list:定义l= ['a','b'],list有序,可增减
# len(list),append('x'),insert(1,'x'),pop(),list[1] = 'x',l.sort()
# 切片访问:l[0:3],l[-2:],前10个数,每两个取一个:l[:10:2],也可用于字符串
#2,tuple:定义t=('a','b'),tuple和list一样,但不可增删改
#3,dict: 定义d = {'a'=1,'b'=2},访问d['key'],不存在会报错,所以'a'in d = Ture,d.get('a'),不存在返回None不报错
# d.pop('a')
#4,set:定义 s = set([1,2,3]),set和dict类似只存key值,发生重复会过滤掉
#列表生成公式:
>>> range(
1
,
11
)
[
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
]
>>> [x * x
for
x
in
range(
1
,
11
)]
[
1
,
4
,
9
,
16
,
25
,
36
,
49
,
64
,
81
,
100
]
>>> [m + n
for
m
in
'ABC'
for
n
in
'XYZ'
]
[
'AX'
,
'AY'
,
'AZ'
,
'BX'
,
'BY'
,
'BZ'
,
'CX'
,
'CY'
,
'CZ'
]
#两个变量来生成list:
>>> d = {
'x'
:
'A'
,
'y'
:
'B'
,
'z'
:
'C'
}
>>> [k +
'='
+ v
for
k, v
in
d.iteritems()]
[
'y=B'
,
'x=A'
,
'z=C'
]
#字符串变成小写:
>>> L = [
'Hello'
,
'World'
,
'IBM'
,
'Apple'
]
>>> [s.lower()
for
s
in
L]
[
'hello'
,
'world'
,
'ibm'
,
'apple'
]
#列表生成器续:内建generator
#要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:
>>> L = [x * x
for
x
in
range(
10
)]生成list//如果[]变成(),则是生成generator,可用
for
遍历
>>> L
[
0
,
1
,
4
,
9
,
16
,
25
,
36
,
49
,
64
,
81
]
>>> g = (x * x
for
x
in
range(
10
))
#g属于gennerater型
>>> g
<generator object <genexpr> at
0x104feab40
>
#函数:
#1,参数类型检查:
def
myf(x):
if
not
instance(x, (int, float)):
raise
TypeError(
'type error!'
)
#2,多个返回值:定义默认参数要牢记一点:默认参数必须指向不变对象(非变量)!
def
move(x,y,anlge=
10
):
nx = x+math.cos(angle)
ny = x+math.sin(angle)
return
nx,ny
nx,ny = move(
4
,
6
)
#返回值两个是tuple(),tuple正好可以x,y = ('x','y')这样赋值
#3,不定个参数:*//最后的*p会独立组装成tuple
def
myf(*p):
sum =
0
for
n
in
p:
sum = sum+p
return
sum
a = myf(
3
,
4
,
56
,
3
),如传入l=[
3
,
6
,
78
] a=myf(*l)
#4,关键字参数:**//最后的**kw会独立组装成dict,
def
person(name, age, **ky):
print
'name:'
, name,
'age:'
, age,
'other:'
, kw
>>> kw = {
'city'
:
'Beijing'
,
'job'
:
'Engineer'
}
>>> person(
'Jack'
,
24
, **kw)//或者person(
'Jack'
,
24
, city=
'Beijing'
, job=
'Engineer'
)
name: Jack age:
24
other: {
'city'
:
'Beijing'
,
'job'
:
'Engineer'
}
#5迭代:
#判断能否用for ch in d 来迭代
>>>
from
collections
import
Iterable
>>> isinstance(
'abc'
, Iterable)
# str是否可迭代
True
>>> isinstance([
1
,
2
,
3
], Iterable)
# list是否可迭代
True
>>> isinstance(
123
, Iterable)
# 整数是否可迭代
False
>>>
for
x, y
in
[(
1
,
1
), (
2
,
4
), (
3
,
9
)]:
...
print
x, y
...
1
1
2
4
3
9
#遍历字典的kv,方法:iteritems()
>>>
for
k, v
in
d.iteritems():
...
print
k,
'='
, v
#6高阶函数:
#一个函数就可以接收另一个函数作为参数
def
add(x, y, f):
return
f(x) + f(y)
map:
>>>
def
f(x):
...
return
x * x
...
>>> map(f, [
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
])
#函数内对列表每个参数调用一次f函数,对外部只算一次
[
1
,
4
,
9
,
16
,
25
,
36
,
49
,
64
,
81
]
>>> map(str, [
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
])
#转换字符串
[
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
]
#reduce:reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
>>>
def
fn(x, y):
...
return
x *
10
+ y
...
>>> reduce(fn, [
1
,
3
,
5
,
7
,
9
])
13579
#map和reduce:把str转换为int的函数:
>>>
def
fn(x, y):
...
return
x *
10
+ y
...
>>>
def
char2num(s):
...
return
{
'0'
:
0
,
'1'
:
1
,
'2'
:
2
,
'3'
:
3
,
'4'
:
4
,
'5'
:
5
,
'6'
:
6
,
'7'
:
7
,
'8'
:
8
,
'9'
:
9
}[s]
...
>>> reduce(fn, map(char2num,
'13579'
))
13579
#filter:和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
#把一个序列中的空字符串删掉:
def
not_empty(s):
return
s
and
s.strip()
filter(not_empty, [
'A'
,
''
,
'B'
,
None
,
'C'
,
' '
])
#sorted:sorted()函数也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序
def
reversed_cmp(x, y):
if
x > y:
return
-
1
if
x < y:
return
1
return
0
#传入自定义的比较函数reversed_cmp,就可以实现倒序排序:
>>> sorted([
36
,
5
,
12
,
9
,
21
], reversed_cmp)
[
36
,
21
,
12
,
9
,
5
]
>>> sorted([
36
,
5
,
12
,
9
,
21
])
[
5
,
9
,
12
,
21
,
36
]
#返回函数、闭包函数:
#当一个函数返回了一个函数后,其内部的局部变量还被新函数引用
def
count():
fs = []
for
i
in
range(
1
,
4
):
def
f():
return
i*i
fs.append(f)
return
fs
f1, f2, f3 = count()
>>> f1()
9
>>> f2()
9
>>> f3()
9
#返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。
#关键字lambda:表示匿名函数,关键字lambda表示匿名函数,冒号前面的x表示函数参数。
#匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。
lambda
x:x*x 相当于:
def
f(x):
return
x * x
B
r
E
D
(
0
)
(
0
)
回复:
还没有人发言哦,来抢沙发吧~
请先
登录
说点什么吧~
学堂公告
各位MOOCer大家好 (^-^)V
欢迎来到学堂在线广场~
在这里你可以玩活动,看资讯,晒笔记。
还可以交学友、发心情、聊人生。
在学堂的每一天,就从这里开始吧!
点击
广场指南
了解更多
推荐活动
我要举报
提交