一. 迭代
1. 迭代协议
- next()
f=open('data.txt',encoding='utf-8')
f.__next__()
'学编程 好心情'
2.迭代工具 for…推导…map
- 迭代器对象
(1)已经实现 - 可迭代对象
(1)iter() ->iter()用于生成迭代器
f=open('data.txt',encoding='utf-8')
iter(f) is f
True
next(f)
'youpin\n'
urls=['youpinketang.com','uke.cc','codeclassroom.com']
iter(urls) is urls
False
i=iter(urls)
i.__next__()
'youpinketang.com'
有些自己能迭代,有些不能
推导表达式
l=[1,2,3,4,5]
res1=[x for x in l]
type(res1)
<class 'list'>
res1
[1, 2, 3, 4, 5]
res2=[x+10 for x in l]
res2
[11, 12, 13, 14, 15]
urls
['youpinketang.com', 'uke.cc', 'codeclassroom.com']
res3=[url.upper() for url in urls]
res3
['YOUPINKETANG.COM', 'UKE.CC', 'CODECLASSROOM.COM']
res4=[url for url in urls if url.endswith('.com')]
res4
['youpinketang.com', 'codeclassroom.com']
- 内置可迭代对象
(1)range()
result=[x**2 for x in range(1,6)]
result
[1, 4, 9, 16, 25]
r=range(1,6)
iter(r) is r
False
i=iter(r)
i.__next__()
1
(2) map()
def double_number(x):
return x * 2
l=[1,2,3,4,5]
result=list(map(double_number,l))
print(result)
(3) zip()
result=zip(['x','y','z'],[1,2,3])
result
<zip object at 0x10a4b02c8>
for x in result:
... print(x)
...
('x', 1)
('y', 2)
('z', 3)
二. 函数
#定义函数
def read_book():
print('got book')
print('read book')
print('put book')
#调用函数
read_book()
1. 为什么要用
- 最大化代码重用
- 最小化代码余下
- 过程分解
2. 定义
- define 方法名(参数,…): 函数体
def learning(name,course,start,end):
print('{}get:{}'.format(name,course))
print('learn from {} to {}'.format(start,end))
print('{} quit'.format(name))
learning('Tom','Python',1,3)
3. 调用
- 函数名(实际参数)
def add_number(x,y):
result = x + y
return result
a=10
result = a + add_number(5,3)
print(result)
def intersect(seq1,seq2):
res = []
for x in seq1:
if x in seq2:
res.append(x)
return res
s1='abcdefg'
s2='youpinketang.com'
print(intersect(s1,s2))
4. 变量作用域
- Local (4)
- Global (2)
x = 55
def func():
x = 99
print(x)
print('total x:',x)
print('x in function:')
func()
把全局改成99
x = 55
def func():
global x
x = 99
print(x)
print('total x:',x)
print('x in function:')
func()
print('total x:',x)
- Built-in (1)
覆盖原来的函数名
def len():
print('selfdefine')
len()
- Enclousure (3)
def func():
x = 100
def nested():
nonlocal x
x = 99
print(x)
nested()
print(x)
func()
5. 参数
- 传递
(1)不可变类型,传递副本给函数,函数内部操作不影响原始值
def change_int(x):
x += 10
x = 5
print(x)
chang_int(x)
print(x)
(2)可变类型,传递地址引用,函数内操作可能会影响原始值
def change_list(l):
l[0] = 99
l = ['uke.cc','codeclassroom.com','youpinketang.com']
print('origional list:',l)
change_list(l)
print('final list:',l)