目录
一、运算
1.1、基本运算符 :
1.2、特殊运算符:
1.3、多变量赋值(交换)
1.4、逻辑运算符
1.5、比较运算符
编辑
1.6、赋值运算符
编辑
1.7、位运算符(两个数字上下看,再相加)
1.8、三元运算
二、循环结构
①foreach(for i in)
②死循环while
三、函数
3.1、function函数和 method 方法的区别**
3.2、传参的几种情况
3.3、递归调用:
3.4、Lambda表达式(只存在一行代码)
四、推导式(列表生成式)
4.1、简介:
4.2、字典
五、装饰器
5.1、简介:
5.2、装饰器好处:
5.3、区别
5.4、案例:
六、类
6.1、定义类与属性
print(5//2)----->2
a = 1
b = 2
a, b = b, a # 交换 2,1
print(f'{a},{b}') # f格式化字符串
print(1 or 2)
#输出1
案例:
根据速度完成对等级的判断
假设对成长速度显示规定如下:
成长速度为5显示等级1;
成长速度为10显示等级2;
成长速度为15显示等级3;
其他都显示都显示等级0;
speed = 10
res = (speed <= 5 and "等级1") or \
(speed <= 10 and "等级2") or \
(speed <= 15 and "等级3") or \
"等级4"
print(res)
and 前面为真,走到后面去了 假就前面
& | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 |
---|---|
| | 按位或运算符: |
只要对应的二个二进位有一个为1时,结果位就为 | |
^ | 按位异或运算符: |
当两对应的二进位相异时,结果为1 | |
<< | 左移动运算符: |
运算数的各二进位全部左移若干位,由右边的数字指定了移动的位数,高位丢弃,低位 补0。 | |
>> | 右移动运算符: 把左边的运算数的各二进位全部右移若干位,右边的数字指定了移动的位数 |
# 101 5
# 111 4 2 1 =7两个数字上下看,再相加
# #按位语
# 101 4 0 1=5
print(7 & 5) # 101
print(7 | 5) # 111
print(7 ^ 5) # 10
print(7 << 2) # 1110
4 # 2进制 0 2 4 -->100
16 # 2进制 0 2 4 8 16 -->10000
15 # 01111
# 相反---》按位语都是位0
32 # 100000
31 # 011111
print(32 & 31) # 0
比较:
a = 1
b = 2
java里 :a>2?'a大':'b大'
pythy里:'a大' if a>b else 'b大'(两个选择在旁边中间是if然后else)
# user=int(input('请输入你的选择'))#转int型
# #让电脑随机一个数字
# computer= random.randint(1,3)
# #电脑必赢:比用户大1
# win=user+1
# win=1 if win>3 else win#大于三超过了就还原为一
# print(
# (computer==win and "电脑赢了")or(computer==user and "平局")or"电脑输了"
# )
注:pass是占位,因为没有{}只有空格,因此需要空两格
python里面没有i++;只有+=,也没有{},有:,更没有if els有elif
# python提供了迭代器range,生成范围数组,不能接条件
# 案例:遍历0-99
for i in range(100):
print(i)
#带参数
for i in range(10,100):
print(i)
# i = 0
# while i < 100:
# print(i)
# i += 1
#案例
nums = range(100)[1::2] # 奇数1,3,5.。。
s = 0
for i in nums:
s += i
# break
else:
#检查循环是否正常执行,如果用break return就断了,就不会输出
#正常走完才输出
print('hello')
1.pycharm有提示 函数前面有个小f,方法前面是m
2、方法至少有两个参数,第一个都是self,函数标几个就几个
3、直接调用的是函数,通过对象点出来的是方法
语法 :代码划分通过空格
#def 函数名():
def say():
print('hello')
# 带参数 参数不带类型什么都可以,出现了同名的函数,会覆盖以最后那个输出,所有没有重载
def say(msg):
print(msg)
say(123)
类型提示**
变量的后面+类型
# 定义一个函数,输出两个数字相加的结果
def calc(a: int, b: int):
print(a + b)
calc(1, 2)
错误,看提示 calc(1,'2') 数据类型不同 调用函数的时候 ,参数可以不按照顺序 b= calc(b=10, a=5)
res(1, 2)
res(a=1, b=2)
res(a: int, b: int = 10)
对于参数的个数 不确定有多少个
java 里: sum(int..rs) ->sum(1,2,3,4)#
python里:
两种方式 :sum(*rs) rs是一个元组
sum(**rs)#rs是一个字典
#简单
def clc(*rs):
# rs是一个元祖,不可以编辑,可以遍历
print(rs)
clc(1, 2, 3, 4, 5)
#复杂
def clc(*rs):
# rs是一个元祖,不可以编辑,可以遍历
total = 0
for i in rs
total += i
return total # return 返回,可以中断函数,不能写到for里面,与for对齐
rs = clc(1, 2, 3, 4, 5)
print(rs)
# 多值传递
def f1(**rs): #字典
print(rs)
f1(a=1, b=2, c=3)
# 缺省参数(给个默认的,但是一定要在最后)
sort(arr,flag=false)
#没明白
def avg(*rs):#rs多个元素由rs接收
# 长度
size = len(rs)
# 和
total = clc(*rs)#将rs打开
# 返回平均值
return total / size
print(avg(1, 2, 3, 4, 5, 6))
def f2():
return 1,2,3 #值之间使用逗号,就是元组的简写
变量作用域: 全局变量 局部变量
def res(target: int):
if target <= 0:
return '0'
if target == 1:
return 1
return target + res(target - 1)
def res(target: int):
if target <= 0:
return '0'
if target <= 2:
return 1
return res(target - 1) + res(target - 2)
一般写法
def f4(a):
return a+1
简写
f4=lambda a:a+1
#编写一个函数,接收两个参数,并返回最大值
f6=lambda a,b:max(a,b)
f6=lambda a,b:a if a>b else b
#使用 lambda 对字典数据进行排序
persons = [
{"name": "张三", "age": 20},
{"name": "李四", "age": 17},
{"name": "王麻子", "age": 21}
]
less=lambda p:p['age']
print(sorted(persons, key=less))
#方法二reverse反转大到小
print(sorted(persons, key=lambda p:p['age'],reverse=True))
#错误方式:sorted(persons):
#TypeError: '<' not supported between instances of 'dict' and 'dict'小于不支持实例之间字典不能比小#supportslessThan函数
列表生成式是python内置的一种创建列表的方法,
通过在[ ]内部执行一行for循环语句,将for循环所遍 历到的元素添加到列表中。由于编译后的字节码更少, 因此比普通的采用append方法生成列表要快很多,不仅如此,使用列表生成式编写的代码更加简洁,通过添加if else 语句,列表生成式也能对列表里的元素进行限制。
数据库(分布式),先从数据库中将数据全部拿出去,做筛选
ls = [1, 2, 3, 4, 5, 6, 7]
# 题目:找大于5的数据 filter两个参数(函数(简写),下标)
# 方法一:
for i in filter(lambda a: a > 5, ls):
print(i)
# 方法二:
# 遍历循环ls 然后前面 i(进到集合里)[i] 是后面i放集合里
# 方法三:推导式
print([i for i in ls if i > 5])
# 前面是三元 st里面要么是0要么是1
lst = [1 if item % 2 == 1 else 0 for item in range(1, 11)]
注:前面if控制长什么样子,if后面数据出来条件
class_dict = {
'c++': 90,
'python': 93,
'java': 95,
'javascript': 96,
'node.js': 94
}
# 字典推导式 k: v拿到键和值 前面if控制长什么样子,if后面数据出来条件
new_class_dict = {k: v for k, v in class_dict.items() if v >= 95}
print(new_class_dict)
4.3、集合
lst = [
{'name': 'python', 'price': 100},
{'name': 'c++', 'price': 100},
{'name': 'java', 'price': 80},
{'name': 'java', 'price': 100},
{'name': 'python', 'price': 85},
{'name': 'node', 'price': 99},
]
# 拿科目名字 list循环 前后分开看
[item['name'] for item in lst]
# 带条件
[item['name'] for item in lst if item['price'] > 90]
def res(arg1, arg2, arg3):
print("arg1:", arg1)
print("arg2:", arg2)
print("arg3:", arg3)
# 元组
args = ("two", 3, 5)
# 调用传上面三个参数进去
# 方法一
res(args[0], args[1], args[2])
# 方法二
res(*args)
kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
res(**kwargs)
装饰器是闭包的一种应用。
装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使
在不用更改原函数的代码前提下给函数增加新的功能。
print(a) --->a没有运行,就是一个函数
print(a()) ----> a函数的运行return结果None
def outer(a): # a=10
def inner(b): # b=20
return a + b
return inner
# outer(10) # inner是函数a
# outer(10)(20) # 是函数a
def a1(func):
def a2():
print("开启")
func()
print("关 闭")
return a2
@a1
def say():
print('hhhh')
say()
# time别导错包
def time_wrapper(func):
def wrapper():
t1 = time.time()
func()
t2 = time.time()
print(t2 - t1)
return wrapper
@time_wrapper
def hello():
for i in range(3):
time.sleep(1)
hello()
def time_wrapper(func):
def wrapper(*args, **kwargs):#给我打包
t1 = time.time()
func(*args, **kwargs)#拆开
t2 = time.time()
print(t2 - t1)
return wrapper
@time_wrapper
def hello(msg):
print(msg)
time.sleep(2)
hello()
注:不带括号默认继承object
class Dog:
# 属性要么给默认值,要么给类型
name: str
age = 19
# 函数放类里是方法了,要传参数
def say(self):
print('nnn')
def sit(self):
print(f'小狗{self.name}丢下') # self当前对象
# 实例化
d1 = Dog()
d2 = Dog()
d1.name = 'jack'
print(d1.age)
# 类的属性存在一个字典的,Python 中对于对象的属性是属于动态可变化的(可以有无数个)。
# 调
d1.sit() # 虽然函数传了参数,但是调不用传,因为自己把自己传了(d1进去)
# 实例化
d1 = Dog()
d2 = Dog()
print(d1 == d2) # 不相等fase