【python知识点总结】第三章 高级特性

第三节 高级特性

一 切片slice

​ 适用于list、tuple、字符串的随意截取

​ 语法:序列[开始位置下标:结束位置下标:步长],不包含结束位置下标对应的数据,步长默认为1

str1='abcdefg'
print(str1[0:4:2])		# ac —— 步长为2

# 创建一个0-99的list
L=list(range(100))

# 按一般方法,是新建一个list然后循环输出要截取的位置值
R=[]
for n in range(10):
    R.append(L[n])
print(R)				# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 利用切片,直接截取
print(L[0:3])			# [0, 1, 2]
print(L[-3:-1])			# [97, 98] —— -1表示最后一个数据,但是结束位置下标取不了

# 对于tuple也是
T=tuple(range(50))
print(T[2:7])			# (2, 3, 4, 5, 6)

#对于字符串也是
a='ABCDEFG'
print(a)				# ABCDEFG
print(a[:3])			# 从0开始的话可以省略0——ABC
print(a[4:])			# 省略后面的0直接默认到最后——EFG
print(a[:])				# 选取所有——ABCDEFG
print(a[::-1])			# -1表示从右向左选取,即倒叙排列——GFEDCBA

二 迭代iteration

即用for…in…完成,作用于一个可迭代对象

迭代 list

L=list(range(10))
for i in L:
    print(i)			# 0 1 2 3 4 5 6 7 8 9

迭代 dict的 Key

d={'a':1,'b':2,'c':3}
for key in d:
    print(key)			# a b c

迭代 dict的 value

for value in d.values():
    print(value)		# 1 2 3

迭代 dict的 key和 value

for k,v in d.items():
    print(k)			# 1 2 3
    print(v)			# a b c
    print(k,'=',v)		# a = 1		b = 2	c = 3

迭代字符串

for ch in 'ABCDE':
    print(ch)			# A B C D E

将 list迭代成索引 -元素对

for i,value in enumerate(['a','b']):
    print(i,value)		# 0 a	1 b

判断对象是否可迭代

from collections.abc import Iterable
print(isinstance('abc',Iterable))		# isinstance进行类型判断,是否为Iterable——True

三 列表生成式list comprehensions

​ 用于创建不同的list

直接创建整数参数 list

L=list(range(1,11))
print(L)				# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

创建平方参数 list

L=[x*x for x in range(1,11)]
print(L)				# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

创建偶数的平方的 list

L=[x*x for x in range(1,11) if x%2==0]
print(L)				# [4, 16, 36, 64, 100]

两层循环,全排列的 list

L=[m+n for m in 'ABC' for n in 'XYZ']
print(L)				# ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

列出当前目录下所有文件和目录名

import os
L=[d for d in os.listdir('.')]
print(L)				# ['.idea', 'main.py']

同时迭代多个变量

d={'a':'A','b':'B','c':'C'}
for k,v in d.items():
    print(k,'=',v)		# a = A		b = B	c = C
    
L=[k+'='+v for k,v in d.items()]
print(L)				# ['a=A', 'b=B', 'c=C']

将 list中所有字符串变小写

L=['HELLO','World','IBM','Apple']
L1=[s.lower() for s in L]
print(L1)				# ['hello', 'world', 'ibm', 'apple']

列表生成式中 if…else区别

L1=['HELLO','World',18,'Apple',None]
L2=[s.lower() if isinstance(s,str) else s for s in L1]		# 表达式
L3=[s.lower() for s in L1 if isinstance(s,str)]				# 筛选
print(L2)				# ['hello', 'world', 18, 'apple', None]
print(L3)				# ['hello', 'world', 'apple']

若if在for后,表示一个筛选条件,则不能带else

若if在for前,表示一个表达式,必须加else

四 生成器generaor

一边循环一边计算的机制

1、generaor

创建生成器 ()

g=(x*x for x in range(1,11))
print(L)						# <generator object <genexpr> at 0x0000025AD92B2F10>

创建list最外层是[],generaor最外层是()

打印出生成器的值(用 for进行)

for n in g:
    print(n)		# 1	4	9	16	25	36	49	64	81	100

2、generaor函数

包含yield

普通函数

def fib(max):
    n,a,b=0,0,1
    while n<max:
        print(b)
        a,b=b,a+b
        n=n+1
    return 'done'
print(fib(6))				# 1	1	2	3	5	8	done

generaor函数

def gfib(max):
    n,a,b=0,0,1
    while n<max:
        yield b				# 只需要加yield就是生成器函数了
        a,b=b,a+b
        n=n+1
    return 'done'
print(gfib(6))				# 直接打印——<generator object gfib at 0x0000021C03692F10>
for n in gfib(6):
    print(n)				# for打印内容,但是拿不到返回值——1	1	2	3	5	8

#generaor中打印返回值
while True:
    try:
        x=next(g)
        print('g:',x)						# g: 1	g: 1	g: 2	g: 3	g: 5	g: 8
    except StopIteration as e:				# 捕获StopIteration才能拿到返回值,包含在value中
        print('return value:',e.value)		# return value: done
        break

​ generaor函数每次调用next的时候执行,遇到yield返回,再次执行时从上次返回的yield语句执行

def odd():
    print('step 1')
    yield 1
    print('step 2')
    yield (3)
    print('step 3')
    yield (5)
o=odd()
next(o)				# step 1
next(o)				# step 2
next(o)				# step 3
next(o)				# 第四次后没有yield了,程序报错——Traceback (most recent call last):StopIteration

# 调用generaor函数会创建一个generaor对象,多次调用generaor函数会创建多个相互独立的generaor
next(odd())			# step 1
next(odd())			# step 1
next(odd())			# step 1
# 这三个generaor完全独立,所以都从1开始

​ exp:杨辉三角

def triangles(m):
    L=[1]
    j=1
    print(len(L))
    while j<=m:
        yield L
        L=[1]+[L[i]+L[i+1] for i in range(len(L)-1)]+[1]
        j=j+1
print(triangles(5))
for n in triangles(5):
    print(n)

五 迭代器

直接作用于for循环的对象称可迭代对象 Iterable,可被next()函数调用并不断返回下一个值的对象称迭代器 Iterator**

判断是否为 Iterable对象

from collections.abc import Iterable
print(isinstance([],Iterable))			# True
print(isinstance(100,Iterable))			# False

判断是否是 Iterator对象

from collections.abc import Iterator
print(isinstance([],Iterator))						# False
print(isinstance((x for x in range(5)),Iterator))	# True
print(isinstance([1],Iterator))						# False
print(isinstance(iter([1]),Iterator))				# 变为Iterator对象——True

​ 生成器都是Iterator对象,但是list、dict、str是 Iterable不是Iterator对象,将他们变为 Iterator可用iter() 函数

六 递归

​ 函数内部自己调用自己且必须有出口

def sun_function(sum):
    '''递归实现数字累加'''
    if sum>1:
        return sun_function(sum-1)+sum
    return 1

a=3
resule=sun_function(3)
print(resule)


> 本文根据廖雪峰老师python课程和黑马程序员python课程进行记录

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值