Python 基础
在这里插入图片描述

安装包(清华镜像)

  • 例如 jieba : pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jieba 其他包同理,更换后面的名词即可
  • 安装完成之后可以输入 import xxx
    如果没有报错,则说明安装成功

运算符

// 代表除取商

for else结构

  • else 会在 for 循环正常结束后执行,如果 break 退出,则不执行

字符串

  • 字符串 * num = 字符串重复num次连起来 ‘hello’ * 3 = ‘hellohellohello’
  • 下标从左到右从 0 开始,从右到左从 -1 开始
  • find(substr, start, end) & rfind() 找不到返回 -1
  • index() & rindex() 找不到直接报错 count(substr) 统计 substr 的出现次数
  • replace(old_str, new_str, count)替换指定串中的 old_str 成 new_str, 默认全部替换
  • my_str.split(sub_str, count)按照 sub_str 进行切割,如果都不写默认切割 空格和Tab
  • join 方法需要每个可迭代对象每个都是字符串

切片

  • 字符串、元组、集合都有切片
  • 格式:str[start: end: step] 左闭右开 start、end 和 step 都可以省略,但是至少要有一个冒号
  • str[:]得到和原来一样的字符串
  • str1[::-1] 表示字符串翻转

列表

  • 定义:list1 = [] & list2 = list() 定义空列表,列表中可以存放不同数据类型的数据
  • append() 结尾添加列表元素 insert(下标, 元素) extend(可迭代对象) 将可迭代元素的每个元素逐个添加到末尾
  • pop(下标)根据下标删除,默认删最后一个,返回删除值; remove(值)根据值删除,返回删除值 ;del 列表[下标]与pop类似
  • index(值) 根据值查找下标;count(值)根据值查找出现次数;xxx in / not in list 判断是否存在
  • 排序: 必须要列表是全部是同一数据类型才能排序 列表.sort(reverse = True) 直接在列表中进行排序(从大到小) sorted(列表, reverse = True)得到一个新的排序后的列表,不改变原列表 列表.reverse() 直接在原列表逆置

列表推导器

  • list = [生成数据的规则 for 临时变量 in xxx (for 临时变量2 in xxx)]
  list = [i for i in range(5)]
  # list = [0, 1, 2, 3, 4]
  • 加上第二个循环类似于循环嵌套
  • 字典中也有推导器,语法类似 如 dict = {f'name{i}':i for i in range(5)} 不过字典中要注意 key 值的相同引起的数据覆盖,所以要使 key 的生成也是随变量改变

元组

  • 不能修改,其他和列表一样
  • 定义元组使用 ()
  • 定义单个数据的元组使用(3,)要记得加逗号

函数

返回值

  • 如果返回多个返回值,那么将以元组的形式返回

参数传递

  • 位置传参:按照实参的位置顺序将实参的值传递给形参
  • 关键字传参:指定实参给到哪个形参(关键字必须是函数的形参名)
  • 混合使用:先写位置传参再写关键字传参

缺省参数(默认参数)

  • 在函数定义时,给参数一个默认值,这个参数就是缺省参数
  • 缺省参数必须定义在实参后面
  • 不给缺省参数值就默认,修改了就按修改的值

不定长参数

  • *args:不定长元组形参,可以接收所有的位置实参,类型是元组
  • **kwargs:不定长字典形参,可以接收所有的关键字实参,类型是字典
  • 不定长参数可以不填
  • 约定俗称叫 args 和 kwargs,其他标识符名称也可以,只需要加上 *或者**

函数形参的完整格式

  • 普通形参 不定长元组形参 缺省形参 不定长字典形参

print中的 sep 参数

  • 规定 print 中的变量之间的分隔符,默认sep = ' '

拆包和组包

  • 拆包:将容器(元组 / 字典 / 列表)的数据分给多个变量,数据的个数必须要和容器中变量的个数一致,字典拆包拆出来的是 key 值
  • 组包:将多个数据值,组成元组,给到一个变量
  • a, b = b, a巧妙使用拆包和组包进行变量值 的交换
  • *list拆包 相当于 list[0], list[1], list[2], list[3] ...

类型的可变和不可变

  • 可变类型:不修改引用的情况下,修改变量值。如:int,float,tuple,str,bool
  • 不可变类型:修改引用才能修改变量值。如:list, dict

匿名函数

  • lambda [arg1], [arg2]... : 函数体 冒号前面是要传入的参数,冒号后面是函数内容
  • 不能使用 for while if 等结构

自定义排序器

  • 类似于 Java 中的自定义排序器,只需要在 sort 函数中添加 key 参数,给与 key 一个匿名函数即可
  • list.sort(key = lambda 形参 : (排序规则1, 排序规则2...))
  • 形参 代表列表中的每一个参数
  • 如对列表中的每个字典排序
  list1 = [{'name':'shjdas'},
            {'name':'a'},
            {'name':'m'}]
  list1.sort(key = lambda x : x['name'])
  print(list1)

面向对象

封装

类属性

  • self:作为类中的第一个形参,在通过类调用方法的时候,不需要手动的传递实参值, python 解释器自动的将调用该方法的对象传递给 self ,所以 self 这个形参代表的是对象
  class Dog():
      def play(self):
      ...
  dog = Dog()
  dog.play() # python 自动将 dog 对象传递给 self 参数,然后调用 play 方法

魔法方法

__init__

  • 类似于 Java 中的 构造函数,用于对对象进行初始化
  class Human(object):
      def __init__(self, name, age):
          self.name = name
          self.age = age


  human = Human(”张三“, 18)

__str__

  • 类似于 Java 中的 toString() 函数,用于字符串形式输出对象
  class Human(object):
      def __str__(self):
          return f“姓名{self.name}, 年龄{self.age}”


  human = Human(”张三“, 18)
  • 注意:
  • 返回值必须是 str
  • 一般没有形参

__repr__

  • __str__十分类似,也是返回字符串,不过更加准确
  • 将对象放到容器里输出,调用的是__repr__。如:
  class Dog(object):
      ...
      def __str__(self):
          return f"{self.name}, {self.age}"
      def __repr__(self):
          return f"{self.name}"

  list = [Dog("大黄", 1), Dog("大白", 2), Dog("大红", 3)]
  print(list) # ["大黄", "大白", "大红"]
  • 如果没有重写str方法,但重写了repr方法时,所有调用str的时机都会调用repr方法。

__del__析构函数

  • 引用计数:python 的一种内存管理机制,是指一块内存,有多少个变量在引用
  • 当一个变量引用一个内存时,引用计数加 1
  • 删除一个变量 或 这个变量不再引用这块内存,引用计数减 1
  • 当内存的引用计数为 0 时,这块内存被删除,内存中的数据被销毁
  • 调用时机:对象在内存中被销毁删除的时候(引用计数为 0 )会自动调用 __del__ 方法,
  • 程序代码结束,运行过程中创建的所有对象和变量都会被销毁,即调用__del__ 方法
  • 使用 del 变量 ,将这个对象的引用计数变为 0 ,会自动调用 __del__方法

魔法属性

__mro__

  • 获得类的继承关系链

__dict__

  • 获得类的所有属性的一个字典,key 代表 属性名,value 代表属性值

__all__

  • 可以在每个代码文件(模块中)定义,类型是 元组 / 列表
  • 作用:只影响 from ... import *导入行为
  • 如果没有定义 __all__ 变量,模块中的所有功能,都可以被导入
  • 如果定义了,只能导入__all__ 变量中定义的内容
  • 元组/列表中必须是字符串
__all__ = ("num", 'func', 'Dog')

__name__

  • 可以显示一个模块的某功能是被自己执行还是被别的文件调用执行
  • 假设模块A、B,模块A自己定义了功能C,模块B调用模块A,现在功能C被执行了:
  • 如果C被A自己执行,也就是说模块执行了自己定义的功能,那么 __name__ == '__main__'
  • 如果C被B调用执行,也就是说当前模块调用执行了别的模块的功能,那么__name__==’A’(被调用模块的名字) 其实换一种说法也就是表示当前程序运行在哪一个模块中
  • 常用 __name__ == '__main__' 来表示整个工程开始运行的入口

继承

子类调用父类中的被重写的方法

  • 方法 1 :父类.方法名(self)
  • 方法 2 :super(子类, self).方法名(参数)
  • 方法 3 :super().方法名(参数) (是方法 2 的简写)
  class Dog(object):
      def bark(self):
          print("汪汪汪")

  class XTQ(Dog):
      def bark(self):
          print("嘤嘤嘤")
      def see_master(self):
          # Dog.bark(self) 方法 1 
          # super(XTQ, self).bark() 方法 2 
          super().bark() # 方法 3 
  xtq = XTQ()
  xtq.see_master()

多继承

  • class A(B, C, ...)
  • 如果调用的方法父类 B C 中都有,那么会优先调用 前一个父类 B 中的方法
  • 如果想要在子类中调用继承链中其他的方法,可以通过 父类名.方法名(self) 来调用,或 super(要调用的类的子类名,self).方法()

私有权限

  • 格式:__属性名 在属性或方法的前面加上__即可
  • python 中的私有属性的本质是修改属性的名字,在创建对象的时候,会自动的修改属性名 在属性名的前面加上 _类名 如:class People self.__name 实际上是属性名是_People__name

类对象 / 类属性

  • 类对象:一个类就是一个类对象 作用:定义实例对象; 存储类属性
  • 类属性:类中的属性,只有一份,类似于 Java 中的 static 定义的变量 格式:定义在类中,方法外
  • 类属性可以通过对象修改,但是如果 实例对象 有重名的属性,那么用对象修改不了类属性,只会修改对象中的属性

类方法

  • 格式:使用@classmethod定义的方法
  class xxx():
    ...    
    @classmethod    
    def xxx(cls):
        return cls.xxx
  • 默认第一个参数是 cls ,指类对象自身
  • 前提:如果一个方法不需要使用实例属性,而使用类属性,那么就需要定义类方法

静态方法

  • 使用 staticmethod定义的方法,对参数没有要求,可以有,可以无
  • 前提:不需要使用实例属性,同时也不需要使用类属性,此时可以定义静态方法

异常

  • 格式:异常类型名:异常描述
  • raise 异常名抛出异常

捕获异常

  • 方式 1
  try:
    可能发生异常的代码
  except 异常类型 1 :
    发生异常 1 ,执行的代码
  except 异常类型 2 :
    发生异常 2 ,执行的代码
    ...
  • 方式 2
  try:
    可能发生异常的代码
  except (异常类型 1, 异常类型 2,...)
    发生异常执行的代码

打印异常

  • except (异常类型 1, 异常类型 2,…)后面添加 as 异常变量名 然后再print一下即可

打印所有异常

try:
    ...
except Exception as e:
    print(e)

异常的完整结构

try:
    ...
except Exception as e:
    发生了异常执行
else:
    没有发生异常执行的代码
finally:
    不管发不发生都要执行的代码

模块

  • 模块就是一个 python 文件
  • 导入模块
  • import 模块名
  • form 模块名 import 功能1, 功能2,...
  • form 模块名 import * 注意:这种方式容易使同名变量或方法发生覆盖
  • as重命名模块/功能名,不过重命名之后就不能用原始的名字

嵌套目录导入模块报红

  • Mark Directory as -> sources root

  • __init__.py文件每个包都有
  • from 包名 import * 导入的是 __init__.py中的内容

注意

  • python 中没有自增(++)自减(–)运算符
  • python 中有三目运算符,但是与 C 和 Java 中的语法不一样
  • 错误使用:判断条件 ? 正确结果 : 错误结果
  • 正确使用:正确结果 if 判断条件 else 错误结果
  • 例如斐波那契数列 def fun(): return n if n < 2 else fun(n - 1) + fun(n - 2)
  • 或者使用 numpy 中的 np.where()
  • 元组 tuple, 列表 list, 集合 set 之间可以相互转换
  • 在函数中使用 = 修改全局变量,需要先使用 global 声明全局变量,而 insert 、append 等不需要声明
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇