哈喽,大家好,时隔三个月,小编从今天起再次开始为大家更新学习python得基础代码;在前面三篇得内容里,相信大家掌握了不少python的基础代码。希望小编的更新内容,能够让大家在学习python的·道路上有所帮助!!!
目录
51 产看对象类型
52 聚合迭代器
53 nonlocal用于内嵌函数中
54 global 声明全局变量
55 链式比较
56 不用else和if实现计算器
57 链式操作
58 交换两元素
59 去最求平均
60 打印九九乘法表
61 全展开
62 列表等分
63 列表压缩
64 更长列表
65 求众数
51 产看对象类型
class type(name,bases,dict)
传入一个参数时,返回object的类型;
In [1]: class Student():
def__init__(self.id.name):
self.id = id
self.name = name
def__repr__(self):
return'id = '+self.id + ', name = '+self.name
In [2]: xiaoming = Student(id='001',name='xiaoming')
In [3]: type(xiaoming)
Out [3]:__main__.Student
In [4]: type(tuple())
Out [4]:tuple
52 聚合迭代器
创建一个聚合了来自每个可迭代对象中的元素的迭代器:
In [1]: x = [3,2,1]
In [2]: y = [4,5,6]
In [3]: list(zip(y.x))
Out [3]: [(4,3),(5,2),(6,1)]
In [4]: a = range(5)
In [5]: b = list('abcde')
In [6]: b
Out [6]: ['a','b','c','d','e']
In [7]: [str(y) + str(x) for x,y in zip(a,b)]
Out [7]: ['a0','b1','c2','d3','e4']
53 nonlocal用于内嵌函数中
关键词nonlocal常用于函数嵌套中,声明变量 i 为非局部变量;如果不声明,i+=1说明 i 为函数wrapper内的局部变量,因为在i+=1引用(reference)时,i 未被声明,所以会报unreferenced variable的错误。
def excepter(f):
i = 0
t1 = time.time()
def wrapper():
try:
f()
except Exception as e:
nonlocal i
i += 1
print(d'{e.args[0]}: {i}')
t2 = time.time()
if i == n:
print(f'spemding time:{round(t2-t1,2)}')
return wrapper
54 global 声明全局变量
先回答为什么要有global,一个变量被多个函数应用,想让全局变量被所有函数共享。有的伙伴可能会想这还不简单,这样写:
i = 5 def f(): print(i) def g(): print(i) pass f() g()
f和g两个函数都能共享变量i ,程序没有报错,所以他们依然不明白为什么要用global,但是,如果我想要有个函数i 递增,这样:
def h(): i += 1 h()
此时执行程序,bang,出错了!抛出异常:unboundLocalError,原来编译器在解释i+=1时会把i 解析未函数h()内的局部变量,很显然在此函数内,编译器找不到对变量i 的定义,所以会报错。
global就是为解决此问题而被提出,在函数h内,显示地告诉编译器i 为全局变量,然后编译器会在函数外面寻找i 的定义,执行完i+=1后,i还为全局变量,值加1:
i = 0
def h():
global i
i += 1
h()
print(i)
55 链式比较
i = 3
print(1 < i < 3) #False
print(1 < i <= 3) #True
56 不用else和if实现计算器
from operator import *
def calulator(a,b,k):
return {
'+':add,
'-':sub,
'*':mul,
'/':truediv,
'**':pow,
}[k](a,b)
calculator(1,2,'+') # 3
calculator(3,4,'**') # 81
57 链式操作
from operator import (add,sub)
def add_or_sub(a,b,oper):
return (add if oper == '+' else sub)(a,b)
add_or_sub(1,2,'-') # -1
58 交换两元素
def swap(a,b):
return b,a
print(swap(1,0)) #(0,1)
59 去最求平均
def score_mean(lst):
lst.sort()
lst2=lst[1:(len(lst)-1)]
return round((sum(lst2)/len(lst2)),1)
lst=[9.1,9.0,9.7,19,8.2,8.6,9.8]
score_mean(lst) # 9.1
60 打印九九乘法表
from operator import *
def calulator(a,b,k):
return {
'+':add,
'-':sub,
'*':mul,
'/':truediv,
'**':pow,
}[k](a,b)
calculator(1,2,'+') # 3
calculator(3,4,'**') # 81
57 链式操作
from operator import (add,sub)
def add_or_sub(a,b,oper):
return (add if oper == '+' else sub)(a,b)
add_or_sub(1,2,'-') # -1
58 交换两元素
def swap(a,b):
return b,a
print(swap(1,0)) #(0,1)
59 去最求平均
def score_mean(lst):
lst.sort()
lst2=lst[1:(len(lst)-1)]
return round((sum(lst2)/len(lst2)),1)
lst=[9.1,9.0,9.7,19,8.2,8.6,9.8]
score_mean(lst) # 9.1
60 打印九九乘法表
def swap(a,b): return b,a print(swap(1,0)) #(0,1)
59 去最求平均
def score_mean(lst):
lst.sort()
lst2=lst[1:(len(lst)-1)]
return round((sum(lst2)/len(lst2)),1)
lst=[9.1,9.0,9.7,19,8.2,8.6,9.8]
score_mean(lst) # 9.1
60 打印九九乘法表
打印出如下格式的乘法表
1×1=1 1×2=2 2×2=4 1×3=3 2×3=6 3×3=9 1×4=4 2×4=8 3×4=12 4×4=16 1×5=5 2×5=10 3×5=15 4×5=20 5×5=25 1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36 1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49 1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64 1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81
一共有10行,第i 行的第j 列等于:j*i,
其中,
i 取值范围:1<=i<=9
j 取值范围:1<=j<=i
根据例子分析的语言描述,转化为如下代码:
for i in range(1,10):
for j in range (1,i+1):
print('%d*%d=%d'%(j,i,j+1),end="t")
print()
61 全展开
对于如下数组:
[[[1,2,3],[4,5]]]
如何完全展开一维的。这个小例子实现的flatten是递归版,两个参数分别表示带展开的数组,输出数组。
from collections.abc import *
def flatten(lst,out_lst=Nome):
if out_lst is None:
out_lst = []
for i in lst:
if isinstance(i,Iterable): # 判断i 是否可迭代
flatten(i,out_lst) # 尾数递归
else:
out_lst.append(i) # 产生结果
return out_lst
调用flatten:
print(flatten([[1,2,3],[4,5]])) print(flatten([[1,2,3],[4,5]],[6,7])) print(flatten([[1,2,3],[4,5,6]]])) # 结果: [1,2,3,4,5] [6,7,1,2,3,4,5] [1,2,3,4,5,6]
numpy里的flatten与上面的函数实现有些微妙的不同:
import numpy b = numpy.array([[1,2,3],[4,5]]) b.flatten() array([list[1,2,3]),list([4,5]),dtype=object)
62 列表等分
from math import ceil
def divide(lst,size):
if size <= 0:
return [lst]
return [lst[i*size:(i+1)*size] for i in range{0,ceil(len(lst) / size))]
r = divide([1,3,5,7,9],2)
print(r) # [[1,3],[5,7],[9]]
r = divide([1,3,5,7,9],0)
print(r) # [[1,3,5,7,9]]
r = divide([1,3,5,7,9],-3)
print(r) # [[1,3,5,7,9]]
63 列表压缩
def filter_fa;se(lst):
return list(filter(bool,lst))
r = filter_false([None,0,False,'',[],'ok',[1,2]])
print(r) # ['ok',[1,2]]
64 更长列表
def max_length(*lst):
return max(*lst,key=lambda v:len(v))
r = max_length([1,2,3],[4,5,6,7],[8])
print(f'更长的列表是{r}') # [4,5,6,7]
r = max_length([1,2,3],[4,5,6,7],[8,9])
print(f'更长的列表是{r}') # [4,5,6,7]
65 求众数
def top1(lst):
return max(lst,default='列表为空',key=lambda v:lst.count(v))
lst = [1,3,3,2,1,1,2]
r = top1(lst)
print(f'{lst}中出现次数最多的元素为:{r}') # [1,3,3,2,1,1,1,2]中出现次数最多的元素为:1
def filter_fa;se(lst):
return list(filter(bool,lst))
r = filter_false([None,0,False,'',[],'ok',[1,2]])
print(r) # ['ok',[1,2]]
64 更长列表
def max_length(*lst):
return max(*lst,key=lambda v:len(v))
r = max_length([1,2,3],[4,5,6,7],[8])
print(f'更长的列表是{r}') # [4,5,6,7]
r = max_length([1,2,3],[4,5,6,7],[8,9])
print(f'更长的列表是{r}') # [4,5,6,7]
65 求众数
def top1(lst):
return max(lst,default='列表为空',key=lambda v:lst.count(v))
lst = [1,3,3,2,1,1,2]
r = top1(lst)
print(f'{lst}中出现次数最多的元素为:{r}') # [1,3,3,2,1,1,1,2]中出现次数最多的元素为:1
def top1(lst):
return max(lst,default='列表为空',key=lambda v:lst.count(v))
lst = [1,3,3,2,1,1,2]
r = top1(lst)
print(f'{lst}中出现次数最多的元素为:{r}') # [1,3,3,2,1,1,1,2]中出现次数最多的元素为:1
今日份小编更新的python基础代码就到这里了,感谢大家的阅读和点赞,多多支持小编的写作,希望小编的内容对大家在学习python的路上有一些帮助。



