python—高级特性

一、生成式

1.列表生成式

列表生成式就是一个用来生成列表的特定语法形式的表达式。是Python提供的一种生成列表的简洁形式, 可快速生成一个新的list。
普通的语法格式:[exp for iter_var in iterable]
带过滤功能语法格式: [exp for iter_var in iterable if_exp]
循环嵌套语法格式: [exp for iter_var_A in iterable_A for iter_var_B in iterable_B]

比如 有下面的需求:

import string
import random
li = []
for i in range(100):
    s = ''.join(random.sample(string.ascii_letters,4))
    li.append(s)
print(li)

就可以用下面一行代码搞定:

codes = [''.join(random.sample(string.ascii_letters,4)) for i in range(100)]  ##将生成的字符串 存储在列表中
print(codes)

同理,类似的需求

# nums = []
# for num in range(1,101):
#     if num%3==0:
#         nums.append(num)
# print(nums)

还是可以用一行代码搞定

nums = [num for num in range(1,101) if num%3==0]
print(nums)

2.集合生成式

s= {i**2 for i in range(10)}
print(s)

3.字典生成式

d = {i:i**2 for i in range(10)}
print(d)

二、生成器

1.生成器实现的第一种方法

### 生成器实现的第一种方法: 将生成式改写成生成器
nums = (i**2 for i in range(1000))
print(nums)  ## 输出generator
# 打印生成元素,方法一:逐个生成 下面的next表示逐个生成 用的时候再说
print(next(nums))   #0
print(next(nums))   #1
print(next(nums))   #4
print(next(nums))   #9
# 打印生成元素,方法二:for循环生成
for i in nums:
    print(i)

2.生成器实现的第二种方法

### 生成器实现的第2种方法:yield关键字
#   return: 函数遇到return就返回,return后面的代码并不会执行。
#   yield:遇到yield则停止执行代码, 当再次调用next方法时,会从上次停止的地方继续执行,遇到yield停止。
def login():
    a = 1
    return 'login'
#    print(1)  ## return之后的就不再执行了  所以这句话无效
print(login())

def login():
    print('step1')
    yield 1
    print('step2')
    yield 2
    print('step3')
    yield 3

g = login()
print(next(g))
**以下为输出:**
step1
1

三、闭包

其特性如下:

# 1. 函数里面嵌套函数
#2. 外部函数的返回值是内部函数的引用
#3. 内部函数可以使用外部函数的变量

##1. 函数里面嵌套函数
# def tiemit():
#     def warpper():
#         print('warpper')
#     print('timeit')
# tiemit()
输出:
timeit
#2. 外部函数的返回值是内部函数的引用
def timeit():
    def warpper():
        print('warpper')
    print('timeit')
    return warpper
in_fun = timeit() ## wrapper函数, in_fun实质上就是wrapper函数
in_fun()

输出:
timeit
warpper
#3. 内部函数可以使用外部函数的变量
# def timeit(name):
#     def warpper():
#         print('warpper'+name)
#     print('timeit')
#     return warpper
# in_fun = timeit(name='mananananan') ## wrapper函数, in_fun实质上就是wrapper函数
# in_fun()
输出:
timeit
warppermananananan

你可能感兴趣的:(python,开发语言)