<<<<<<<<<<<<三元表达式>>>>>>>>>>
例:平时比大小我们用:
def max2(x,y):
if x > y:
return x
else:
return y
x=22
y=33
学了三元表达式我们可以这样
res = x if x > y else y
print(res)
而且 x和y 返回值可以换成我们自己想要的
<<<<<<<<<<<<生成式>>>>>>>>>>
列表生成式
案例一、
l = []
for i in range(10):
l.append(i)
print(l)
其实我们可以这样
[l = [i for i in range(10)]]()
print(l)
是不是简单多了
案例二、
l = []
for i in range(10):
if i < 5:
l.append(i)
print(l)
当然我们还能这样
l = [ i for i in range(10) if i >5]
print(l)
案例三、
names = ['lxx','hxx','wxx','lili']
l = []
for name in names:
l.append(name+'_哈哈')
print(l)
其实还可以更简单
names = [name+'_哈哈' for name in names]
案例四、
当然 也能这样
names = ['egon','lxx_哈哈','alex_哈哈','wxx_哈哈']
res = [name for name in names if name.endswith('哈哈')]
print(res)
字典(有了列表字典也来了)
res = {i:i*2 for i in range(5)}
print(res)>>>>{0: 0, 1: 2, 2: 4, 3: 6, 4: 8}
集合生成式
res = { i for i in range(5)}
print(res)
没有元组哦
只有生成器表达式
res = (i for i in range(3))
print(res)
print(next(res))
print(next(res))
print(next(res)) 一次只能取一个哦
也可以统计文件的长度
with open('a.txt','r',encoding='utf-8')as f:
res = f.read()
print(len(res))
这样全读出来会不会占用大量内存呢
所以可以这样
res = 0
for line in f:
res += len(line)
print(res)
可以更简单的
res = sun(len(line) for line in f)
print(res)
<<<<<<<<<<<<函数递归>>>>>>>>>>
函数的递归调用
在调用一个函数内部又调用自己,所以递归调用的本质就是一个循环过程
比如
def func():
print('你真帅')
func()
func()
无限的循环到python给定的最大深度1000次
当然深度可以更改 比如这样
import sys
sys.setrecursionlimit(2000)
print(sys.getrecursionlimit())
当然 最好别改哦
大前提:递归调用一定要在某一层结束
递归的两个阶段:
1、回溯:向下一层层挖井
2、递推:向上一层一层返回
递归的简单练习
nums = [1,2[,3[,4[,5[,6[,7[,8[9]]]]]]]]
def get(l) # nums 传给 l
for num in l: #循环 l 给 num
if type(num) is list: # 如果是列表 就继续循环喽
get(num) 哈哈
else:
print(num) 不是就输出呗
get(nums)
怎么样是不是很简单
二分法、对半分检测 懂吧
nums = [-3,4,6,12,34,54,56,77,89,90,123,145,167,188] 要按照大小排列才能使用
find_num =53 要想找53 在不在这些数中
def find(nums,find_num):
print(nums)
if len(nums) == 0:
print('no exists')
return
mix_index = len(nums)// 2
if find_num > nums[mix_index]:
find(nums[mix_index+1:],find_num)
elif find_num < nums[mix_index]:
find(nums[:mix_index],find_num)
else:
print('you got it')
find(nums,find_num)
好了结果就这样出来了,代码虽长 效率高,不用每一个数都去遍历
<<<<<<<<<<<<匿名函数>>>>>>>>>>
匿名函数:就是没有名字的函数咯
特点,临时用一次
不该用11
f= lambda x,y:x+y
print(f)
res = f(1,2)
print(res)
不该用--2
res = (lambda x,y:x+y)(1,2)
print(res)
小例子
薪资最大人的名字
salaries= {
'egon':3000,
'tom':100000,
'lxx':100
}
# print(max(salsries.values())) # 取到的是最大的薪资
# print(max(salsries)) # 取到的是最大的k
所以我们可以
def func(k):
return salaries[k]
print(max(salaries,key=func)) 最大的工资名
简单一点 比如
print(max(salaries,key=lambda k:salaries[k])) 最大工资
print(min(salaries,key=lambda k:salaries[k])) 最小
print(sorted(salaries,key=lambda k:salaries[k])) 从小到大排序
print(sorted(salaries,key=lambda k:salaries[k],reverse=True)) 从大到小排序
了解 装逼专用
map
names = ["lxx",'hxx',"wxx",'lili']
规则
"lxx_sb","hxx_sb"
l = (name + "_sb" for name in names)
res = map(lambda name:name + "_sb",names)
print(list(res))
filter
names = ["lxx_sb",'egon',"wxx_sb",'lili_sb']
print([name for name in names if name.endswith('sb')])
res = filter(lambda name:name.endswith('sb'),names)
print(list(res))
reduce
from functools import reduce
res = reduce(lambda x,y:x+y,[1,2,3])
res = reduce(lambda x,y:x+y,["aa","bb","cc"])
print(res)
res = pow(10,2,3) # 10 ** 2 % 3
print(res)
面向对象
面向过程编程:
核心是“过程”二字,过程就是解决问题的步骤,即先干啥、再干啥、后干啥
所以基于该思想编写程序就好比设计一条一条的流水线
优点:复杂的问题流程化、进而就简单化
缺点:牵一发而动全身、扩展性差
跨年了,希望未来一年更进一步 加油!!!
越来越好