Python语法进阶基础知识的汇总

目录

一、运算

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、定义类与属性


一、运算

1.1、基本运算符

  •        +、-、*、/

1.2、特殊运算符:

  • % 取模 - 返回除法的余数
  • ** 幂 - 返回x的y次幂
  • // 取整除 - 返回商的整数部分(向下取整)
    print(5//2)----->2

1.3、多变量赋值(交换)

 a = 1
 b = 2
 a, b = b, a  # 交换 2,1
 print(f'{a},{b}')  # f格式化字符串

1.4、逻辑运算符

Python语法进阶基础知识的汇总_第1张图片

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.5、比较运算符

Python语法进阶基础知识的汇总_第2张图片

1.6、赋值运算符

Python语法进阶基础知识的汇总_第3张图片

1.7、位运算符(两个数字上下看,再相加)

& 按位与运算符:参与运算的两个值,如果两个相应位都为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

1.8、三元运算

比较: 

a = 1
b = 2

 java :a>2?'a大':'b大'
 pythy:'a大' if a>b else 'b大'(两个选择在旁边中间是if然后else)



 ​

  • 案例:剪刀1 石头2 布3(三元运算)
 # 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"电脑输了"
 # ) 

二、循环结构

①foreach(for i in

注: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)

②死循环while

 # 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')

三、函数

3.1、function函数和 method 方法的区别**

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)

3.2、传参的几种情况

  • 位置传参
 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  #值之间使用逗号,就是元组的简写

变量作用域: 全局变量 局部变量

3.3、递归调用:

  • 计算1+n的和
 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)

3.4、Lambda表达式(只存在一行代码)

  •  一般写法
    
    
 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函数

四、推导式(列表生成式)

4.1、简介:

列表生成式是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)]

4.2、字典

注:前面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)
 ​
 ​

五、装饰器

5.1、简介:

  • 闭包函数:声明在一个函数中的函数,叫做闭包函数。
  • 闭包:内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回了之 后。

装饰器是闭包的一种应用。

装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使

5.2、装饰器好处

在不用更改原函数的代码前提下给函数增加新的功能。

5.3、区别

print(a) --->a没有运行,就是一个函数

print(a()) ----> a函数的运行return结果None

 ​5.4、案例:
​​​​​​
 

  •  一般装饰器
 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()
 ​

六、类

6.1、定义类与属性

注:不带括号默认继承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


你可能感兴趣的:(Python,python)