Python基础
数据类型
1.元组
元组是Python中的一种新的数据结构和列表类似但元组里的数据都是不可变的,但如果元素是列表等数据结构则可以改变
a_tuple = (1,2,3,4,5,6,9)
b_tuple = tuple(range(2,10,2))//参数是start end step
print(b_tuple)
print(a_tuple[-1])
print(a_tuple[0:6:2])
print(a_tuple[:-1])#返回的还是元组,此时操纵的是第二个元素
print(min(a_tuple))
print(a_tuple+b_tuple)#返回新元组
元组的元素的值不可改变,但元素如果是数组的话则可变
还有一点值得注意的是访问多个元组里的元素Python提供了切片,[number:number:number:]分别对用start,end,step,如果为start为-1则指向末尾
2.集合
集合和列表非常相似除了不能存在重复值以外,集合是无序的同类元素的集合
通常创建一个集合的语法
str_1 = "dogs chase cats"
str_2 = "dogs hate cats"
str_1_word = set(str_1.split(" "))
str_2_word = set(str_2.split(" "))
print(str_1_word)
print(str_2_word)
length_1_word = len(str_1_word)
length_2_word = len(str_2_word)
cmn_wrds = str_1_word.intersection(str_2_word)
print(cmn_wrds)
print(len(cmn_wrds))
unq_wrds = str_1_word.union(str_2_word)
print(unq_wrds)
以下是输出结果
3.列表
因为我之前学过Js所以感觉这个列表和Js里的数组特别像,所以我并没有详细的去实验很多列表的函数,下面我就举几个和Js中的数组不一样的地方吧,还是贴代码~
# a = [1,2,-1,-2,3,4,-3,-4]
# b = [pow(x,2) for x in a if x<0]
# print(b)
# c = {'a':1,'b':2,'c':3}
# b = [pow(x,3) for y,x in c.items()]
# # y,x分别是key value
# print(b)
可能是写法不一样吧,基础的还是和JS的数组很像,这里我是用的a列表和c列表推导b列表,在b列表里面用的是生成器
4.迭代器、生成器和可迭代对象
什么是迭代器呢?下面我贴一个代码的例子来看
# list = [1,2,3,4]
# it = iter(list)
# print(it)#it并不是数组而是一个迭代器对象
# print(next(it))
# print(next(it))
# print(next(it))
# print(next(it))
这里我定义了一个列表,列表是一个迭代器,这里用iter是访问List内部的入口,调用next可以一步一步的访问List内的每个元素,这里没有深入的了解迭代器,深入了解的话请看这迭代器注意迭代器遍历一次后就不能再次遍历
什么是生成器呢?请看以下代码
simpleCounter = (x**2 for x in range(1,4))#返回一个生成器
print(simpleCounter)
tot = 0
for x in iter(simpleCounter):
print(x)
前面已经提到了类似与第一行里的定义,就是一个生成器,iter()函数只是用来在循环体中循序访问元素
可以理解为iter()函数是访问生成器和迭代器里每一个元素的入口
可迭代对象和生成器两者才能制造一个迭代器,可迭代对象区别于迭代器可以无限次的遍历。下面贴出如何生成一个可迭代对象
class iterator(object):
def __init__(self,start,end):
self.start = start
self.end = end
def __iter__(self):
for x in range(self.start,self.end):
yield x**2
c = iterator(1,5)
for val in iter(c):
print(val)
for val in iter(c):
print(val)
5.装饰器
最后我们来谈谈python中比较重要的装饰器吧,我理解的装饰器是只能装饰一个函数,作用于函数的参数,作用后的参数在函数里执行 下面贴代码
from string import punctuation
def suqure_input(func):
def to_lower(x):
return x.lower()
def to_text(x):
for p in punctuation:
x = x.replace(p, '')
return x
def wrapper(*args,**kwargs):
x = to_lower(*args, **kwargs)
x = to_text(x)
return func(x)
return wrapper
#装饰器只能装饰一个函数
@suqure_input
def take_text(Text):
print(Text)
return Text.split()
s = "String. With. Punctuation?"
print(take_text(s))
运行结果如下图
在函数执行之前就对函数参数进行了过滤
6.Lambda匿名函数、filter、zip、sort函数
作者这里先提一下JS的匿名函数()=>{}和function()两种,匿名函数有很多实用的地方,作者经常在js里用的是函数表达式比如 fun = () => {} 这样fun就是一个函数 引申出立即执行函数 (()=> {})()在js里面
那么在Python里我这里认识到匿名函数经常用来对数据的筛选、过滤之类的
print(list(filter(lambda x:x>30,a)))
print(list(zip(range(1,5),range(1,5))))# zip函数接受两个参数把元素组合对应
v = (6,5,3,2,31,5)
print(tuple(sorted(v))) #sorted函数是返回一个排序号的列表
print(v)
filter函数接受两个参数 (func,iterable)第一个是函数,第二个是可迭代对象 这里要提一点 迭代器属于可迭代对象,list是迭代器当然也是可迭代对象,注意区分匿名函数和列表推导
b = [pow(x,2) for x in a if x<0]
zip函数接受两个参数把元素组合对应
sorted函数是返回一个排序好的列表不对原列表操作 下面是运行结果
好了好了,这是作者下午学的知识,虽然以前也或多或少学过这些,所以这里说明作者学习效率太低了,以后一步步写出高质量,高产的文章~~如果本文有什么不好的地方 请多多见谅~