大家好,又见面了,我是你们的朋友全栈君。
学习完Python学习笔记一(基础知识),下面学习Python的高级特性
1. 切片
#取一个list或tuple的部分元素是非常常见的操作,即输出第0,1,2三个元素
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
# 方法一:
print([L[0], L[1], L[2]])
# 方法二:
r = []
n = 3
for i in range(n):
r.append(L[i])
print(r)
# 方法三:
print(L[0:3])
#如果第一个索引是0,还可以省略:
print(L[:3])
print(L[2:3])
['Michael', 'Sarah', 'Tracy']
['Michael', 'Sarah', 'Tracy']
['Michael', 'Sarah', 'Tracy']
['Michael', 'Sarah', 'Tracy']
['Tracy']
2.迭代
for循环,包括我们自定义的数据类型,只要符合迭代条件(即
Iterable类型的对象),就可以使用
for循环。
print("#dict遍历")
d = {'a': 1, 'b': 2, 'c': 3}
for key in d:
print(key)
print("#字符串遍历")
for ch in 'ABC':
print(ch)
print("#输出下标值")
for i, value in enumerate(['A', 'B', 'C']):
print(i, value)
print("同时遍历两个元素")
for x, y in [(1, 1), (2, 4), (3, 9)]:
print(x, y)
#dict遍历
a
b
c
#字符串遍历
A
B
C
#输出下标值
0 A
1 B
2 C
同时遍历两个元素
1 1
2 4
3 9
3.列表生成式
print("#列表生成式")
print([x * x for x in range(1, 11)])
输出结果:
#列表生成式
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
4.生成器
print("#生成器")
g = (x * x for x in range(10))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print("for循环遍历")
g = (x * x for x in range(10))
for n in g:
print(n)
输出结果:
#生成器
0
1
4
9
16
for循环遍历
0
1
4
9
16
25
36
49
64
81
5.迭代总结
凡是可作用于for循环的对象都是Iterable类型;
凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象;
Python的for循环本质上就是通过不断调用next()函数实现的。
6. 函数式编程
print("#函数为变量")
f = abs
print(f(-10))
print("#函数作为参数传入")
def add(x, y, f):
return f(x) + f(y)
print(add(-5, 6, abs))
#函数为变量10#函数作为参数传入11
7.map/reduce
print("#map/reduce")
def f(x):
return x * x
r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
#r是一个Iterator,Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list
print(list(r))
#map/reduce[1, 4, 9, 16, 25, 36, 49, 64, 81]
8.filter
filter()的作用是从一个序列中筛出符合条件的元素。由于
filter()使用了惰性计算,所以只有在取
filter()结果的时候,才会真正筛选并每次返回下一个筛出的元素。
print("#去除空字符串")def not_empty(s): return s and s.strip()r = filter(not_empty, ['A', '', 'B', None, 'C', ' '])print(list(r))
输出结果:
#去除空字符串
['A', 'B', 'C']
9.排序
print("#python排序")r = sorted([36, 5, -12, 9, -21])print(r)print("#根据abs结果排序")r = sorted([36, 5, -12, 9, -21], key=abs)print(r)print("#字符串排序")#默认情况下,对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母Z会排在小写字母a的前面r= sorted(['bob', 'about', 'Zoo', 'Credit'])print(r)print("#不区分大小写字符串排序")r= sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)print(r)
输出结果:
#python排序[-21, -12, 5, 9, 36]#根据abs结果排序[5, 9, -12, -21, 36]#字符串排序['Credit', 'Zoo', 'about', 'bob']#不区分大小写字符串排序['about', 'bob', 'Credit', 'Zoo']
10.匿名函数
print("#匿名函数")
print(list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])))
输出结果:
#匿名函数
[1, 4, 9, 16, 25, 36, 49, 64, 81]
11.装饰器
import time
def now():
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())))
f = now
print("打印当前时间")
f()
print("输出函数名称")
print(now.__name__)
# wrapper()函数的参数定义是(*args, **kw),因此,wrapper()函数可以接受任意参数的调用
def log(func):
def wrapper(*args, **kw):
print('call %s():' % func.__name__)
return func(*args, **kw)
return wrapper
# 在wrapper()函数内,首先打印日志,再紧接着调用原始函数。
@log
def now():
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())))
print("python装饰功能测试验证,相当于now=log(now)")
now()
# 传入参数的log
def log(text):
def decorator(func):
def wrapper(*args, **kw):
print('%s %s():' % (text, func.__name__))
return func(*args, **kw)
return wrapper
return decorator
@log("打印当前时间方法")
def now():
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())))
print("python装饰功能测试验证,相当于now = log('execute')(now)")
now()
打印当前时间
2017-03-28 16:11:25
输出函数名称
now
python装饰功能测试验证,相当于now=log(now)
call now():
2017-03-28 16:11:25
python装饰功能测试验证,相当于now = log('execute')(now)
打印当前时间方法 now():
2017-03-28 16:11:25
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149563.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...