python基础笔记

Python杂记

这些是我学习Python的过程中杂乱的一些记录,我将这些记录和Python的一些基本常识记录在这里,如果你想看系统的知识部分,目录在左边,点击对应的地方跳转吧!

逻辑运算符

代码逻辑表达
or
and
not取反

打印输出不换行

print("输出的内容", end="")  # 加上end="",等于一个空的字符串,下一次输出会接在这次输出后继续输出

结束循环

代码结束方式
break结束所有的循环,往外跳一层
continue退出本次循环,进入下一次循环

变量

变量类型

查看变量类型:

type(******)

常用的格式符号

符号含义
%c字符
%s字符串
%d有符号十进制整数
%f浮点实数

运算符

+-*///%**
取整数取余

复合运算

c+=a ==> c=c+ac-=a ==> c=c-a
c*=a ==> c=c*ac/=a ==> c=c/a
c%=a ==> c=c%ac**=a ==> c=c**a
c//=a ==> c=c//a

常用的数据类型转换

int(x)将x转换为一个整数
long(x)将x转化为一个长整数
float(x)将x转化为一个浮点数
complex(real)创建一个复数
str(x)将对象转换为字符串
repr(x)将对象x转化为表达式字符串
eval(str)计算str中有效Python表达式,并返回一个对象
tuple(s)将序列s转换为一个元组
list(s)将序列s转化为一个列表
chr(x)将一个整数转化为一个字符
unichr(x)将一个整数转换为Unicode字符
ord(x)将一个字符转换为它的整数值
hex(x)将一个整数转化为十六进制字符串
oct(x)将一个整数转换为八进制字符串

Python内置的部分函数

len(item)容器中元素的个数
max(item)返回容器中最大元素
min(item)返回容器中最小值
del(item)删除变量

可变和不可变类型

不可变类型可变类型
数字、字符串、元组列表、字典

交换两个变量的值

# 所有语言都可用的方法
a = a + b
b = a - b
a = a - b
# Python特有的方法
a, b = b, a

a+=a与a=a+a的区别

区别
以上三个程序,结果都不相同,第一个程序,因为a是不可变类型,所以不变;第二个程序,同样使用+=运算,但a变成了可变类型,所以发生了改变;第三个程序,虽然a是可变类型,但未使用+=运算,a没有发生改变。

开始执行语句

if __name__ == "__main__":

这个语句的作用是,当你这个模块写好之后,在本模块中加入这个语句,开始测试程序,当别的模块将你导入时,你测试程序的代码就不会被执行。

给程序传递参数

例如:

import sys  # 所运行的python模块
print(sys.argv)  # 所存储的参数,以列表形式存储

向以上程序传递参数运行,传递的参数中间用空格隔开,运行效果如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HCbUW79r-1572255305130)(https://cy-pic.kuaizhan.com/g3/75/30/f6c6-8db3-46e8-be68-2e3d913de9a828)]

eval向上一次转换

eval

如上图,列表变为字符串后,再用列表是转换不回之前的列表的,但是用eval就可以

"=="和"is"的区别

==内容相同,值相同返回True
is两个变量存储的是同一个东西,即地址要相同才能返回True

深拷贝和浅拷贝

浅拷贝:只复制地址

浅拷贝

深拷贝:将内容复制出来,copy.deepcopy()

深拷贝

只深拷贝一层,不全部深拷贝:copy.copy()

当c是可变类型时,会深拷贝一层,当c是元组之类不可变类型时,等同于浅拷贝

拷贝

进制转换

进制转换

四舍五入

Python2中:使用round()方法来四舍五入

round(1.5) ==> 2.0
round(2.5) ==> 3.0
round(2.563, 2) ==> 2.56

Python3中round()方法的定义:离两个整点一样近时,取偶数(慎用

round(1.5) ==> 2.0
round(2.5) ==> 2.0
round(1.35, 1) ==> 1.4

Python3中的四舍五入:

  • 采用int向下取整:+0.5的方法
  • 四舍五入
  • 如上图,前两个四舍五入到整数,最后一个四舍五入保留到小数点后两位

字符串Str

字符串用单引号或双引号声明

切片

切片

切片的前两个数值是切片的范围,第三个数值为切片的步长

查找

方法名写法备注
find()str.find()找到返回第一个字符的下标,找不到返回-1
rfind()str.rfind()从右往左找,返回的结果和find()相同
index()str.index()从左往右找,找到返回字符下标,找不到出现ValueError异常
rindex()str.rindex()从右往左找,返回的结果和index()相同

计数

方法名写法备注
count()str.count(“xxx”)返回xxx在str的start和end之间出现的次数

检查

方法名写法备注
startswith()str.startswith(“xxx”)以xxx开头返回True,否则为False
endswith()str.endswith(“xxx”)以xxx结尾返回True,否则为False
isalpha()str.isalpha()纯字母返回True,否则返回False
isdigit()str.isdigit()纯数字返回True,否则返回False
isalnum()str.isalnum()所有字符都是数字或字母返回True,反之返回False
isspace()str.isspace()只含有空格返回True,反之返回False

字符变化

方法名写法备注
replace()str.replace(“xxx”, “yyy”, n)将字符串中的xxx替换为yyy,替换n次
capitalize()str.capitalize()把字符串第一个字符大写
title()str.title()把字符串的每个单词首字母大写
lower()str.lower()所有字符小写
upper()str.upper()所有字符大写

显示

方法名写法备注
center()str.center(n)居中显示,n代表总共显示的宽度
ljust()str.ljust(n)靠左显示
rjust()str.rjust(n)靠右显示

空格

方法名写法备注
lstrip()str.lstrip()删除左边的空格
rstrip()str.rstrip()删除末尾的空格
strip()str.strip()删除两边的空白字符

切割和拼接

方法名写法备注
split()str.split(“xxx”, n)字符串以xxx字符进行切割,切割后最多有n个字符串,返回一个切割完成后的列表
partiton()str.partition(“xxx”)以从左边找到的第一个xxx为中心切割字符串,返回元组
rpartition()str.rpartition(“xxx”)以从右边找到的第一个xxx为中心切割字符串,返回元组
splitlines()str.splitlines()按照换行符分割成一个列表
join()如下图例子用指定的字符拼接多个字符串

拼接举例:

拼接


列表List

列表用[]进行声明

增删改查

方法名写法备注
append()list.append(x)列表尾部添加元素x
insert()list.insert(n, x)将元素x添加到下标为n的地方
extend()list0.extend(list1)将list1中的元素逐一添加到list0中
pop()list.pop()删除并返回列表最后一个元素
remove()list.remove(x)删除列表中的元素x,从左开始,只删除一次
del()del list[n]删除列表下标为n的元素
index(),count()这两个方法和字符串的用法相同

列表的切片和字符串的切片相同

排序

方法名写法备注
sort()list.sort()对列表从小到大排序
list.sort(key=len)按长度进行排序
list.sort(reverse=True)升序排序

逆置

方法名写法备注
reverse()list.reverse()将列表逆置

列表生成式

a = [i for i in range(a, b, c)]  # a为起始值,b为结束值,c为步长
a = [i for i in range(a, b, c) if i%2==0]
a = [(i, j) for i in range(a) for j in range(b)]

字典Dir

字典用 {键: 值} 声明

增删改查

dic["key"] = value  # key不存在为添加,key存在为修改
del dic["key"]  # key存在正常删除指定的键值对,key不存在时出现KeyError异常
dic.clear()  # 清空整个字典
dic.get("key", n)  # 查询字典中的键值,key存在时返回对应的value,不存在时返回n值。
dic.get("key")  # 不加n时,如果key不存在会出现KeyError异常
dic.pop("key")  # 将该键值对从字典中删除
dic.popitem()  # 随机弹出一个字典项
dic.setdefault("key": value)  # 功能和get()方法差不多,但key不存在时,会添加键值对{"key": value},存在时返回默认的value
dic1.update(dic2)  # 将dic2中的键值对加入到dic1中,如果有相同的key会替换掉原来的值
dic.has_key("key")  # key存在返回True,不存在返回False

所有键构成的一个对象

dic.keys()

例如:

键

所有值构成一个对象

dic.values()

值

items()

这个方法返回一个所有(键:值)元组的列表的对象

遍历

fromkeys()

这个方法用于创建一个新字典,如下图:

fromkeys

默认创建出的字典的值为None,如果不想使用默认的value值,可以自己提供一个特定值


元组Tuple

元组用 () 进行声明,元组的处理和列表相同,区别在于不能进行增删改操作,只支持查询的操作


集合Set

集合也用 {} 声明,但和字典不同,集合的特点是内部元素不能重复,所以集合常用来对列表中的元素去重,集合支持增删改查操作

set


函数

函数的声明:

def 函数名():
    pass

关键字global:

变量前只要加上关键字,那声明的一定是全局变量

global a = []

不定长参数

def xxx(a, b, *args, **kwargs):
    pass

不定长参数

多余的参数,没带变量名的以元组的形式保存在args中,带变量名的以字典的形式存储在**kwargs中*

如上图所示,我们在传递参数指定变量名时不能指定已有的变量名

匿名函数

  • 方法中使用匿名函数

    如下图,字典存放在列表中对列表的排序为例

字典列表的排序

  • 函数调用传递匿名函数

    如下图:

匿名函数

  • 用户输入匿名函数并执行

    使用eval()转换为其它类型,如下图:

匿名函数

操作文件

操作符

操作符含义
r以只读的方式打开,文件指针放在文件开头
w打开一个文件写入,已经存在的文件会被覆盖,不存在的文件会创建
a打开一个文件,将内容追加到文件末尾,不存在的文件会创建
rb以二进制格式打开一个文件只读
wb以二进制格式打开一个文件写入
ab以二进制格式打开一个文件追加
r+打开一个文件用于读写,指针放在文件开头
w+打开一个文件用于读写
a+打开一个文件用于追加
rb+同上综合理解
wb+同上综合理解
ab+同上综合理解

打开关闭

  • 第一种,手动打开,手动关闭
f = open("文件路径", "操作符")
...
f.close()
  • 第二种,手动打开,自动关闭
with open("文件路径", "操作符") as f:  # 文件打开并存到变量f中
    pass

部分方法

方法写法备注
read()file.read(n)每次读出n个字符,不写n时,一次全部读出,每读一次,虚拟光标向后移
write()file.write(“xxx”)写入xxx内容,并返回写入的字符数
readline()file.readline()一行一行的读
readlines()file.readlines()将每一行读出并以列表的形式保存
seek()file.seek(offset, whence)文件定位,移动虚拟光标。offset:开始的偏移量代表需要移动偏移的字节数,如果是负数表示从倒数第几位开始;whence:可选,默认值为 0,表示要从哪个位置开始偏移,0 代表从文件开头开始算起,1 代表从当前位置开始算起,2 代表从文件末尾算起。

OS操作文件和文件夹

功能方法
文件重命名os.rename(“old_name”, “new_name”)
删除文件os.remove(“xxxx”)
创建文件夹os.mkdir(“xxx”)
删除文件夹os.rmdir(“xxx”)
获取当前路径os.getcwd()
改变默认路径os.chdir(“xxx”)
获取目录列表os.listdir(“xxx”)

类Class

面向对象编程,面向对象开发的三个基本要素:①封装②集成③多态。类是模型,组成类的三部分:①类名②类的属性③类的方法。

类的定义

class 类名:
		# 属性
    	def __init__(self, xx, xx):
            	# 属性初始化
                pass
        # 方法
        def xxx(self):
            	pass

__str__方法

def __str__(self):
    return xxxx

这个方法自动执行,当直接输入这个类时,会输出return的内容

__str__

默认的__str__方法和我们重写之后是不一样的,如果重写此方法,以重写后的方法为准

私有方法

类方法前加有 “__” 代表私有方法

class xxx:
    	def __xxx(self):
            	pass

私有的方法不会被子类继承,子类也无法直接调用,通常条用父类公有的方法,通过这个公有方法去调用子类

私有方法

__del__方法

当这个类创建的对象彻底被删除时会执行这个方法

class xxx:
      def __del__(self):
            	pass

__del__

测量对象的引用个数

import sys  # 导入所需要的模块
class xxx:
    	pass
a = xxx()  # 创建对象
n = sys.getrefcount(a)  # 返回的值n即为对象引用的计数,getrefcount方法会比实际数多1

继承

  • 普通的继承

    # 子类
    class xxx(父类):
        	pass
    
  • 多继承

    # 子类
    class xxx(父类1, 父类2, ......):
        	pass
    

__mro__方法

直接输出可以看到这个类检索方法的顺序

__mro__

super()方法

super()函数是用于调用父类(超类)的一个方法。用这个方法调用被重写的方法

super

类方法和类属性、实例属性和静态方法

# 例子说明
class Game(object):  # Python3建议没有父类都写上这个object类
    	
        num = 0  # 类属性
        
        def __init__(self):  # 实例方法
            	self.name = "laowang"  # 实例属性
        
        @classmethod
        def add_num(cls):  # 类方法,各个实例对象共享方法
            	cls.num = 100
                
        @staticmethod
        def print_menu():  # 静态方法,不可以传参数,与类对象和实例对象没太大关系
            	pass
            
game = Game()
Game.add_num()  # 可用类名,实例名来
game.add_num()  # 调用类方法

Game.print_menu()  # 可用类名,实例名来
game.print_menu()  # 调用静态方法

__new__方法

__new__方法用于构造出一个正确的实例对象,重写后的__new__方法不具有此功能,用return返回父类的__new__方法

class xxx(object):
    	def __new__(cls):
            	pass
            	return object.__new__(cls)

new

单例类的写法

只能创建一次,以后再创建会返回和上一次一样的对象

class xxx(object):
    	__instance = None
        def __new__(cls):
            	if cls.__instance == None:
                    	cls.__instance = object.__new__(cls)
                        return cls.__instance
                  else:
                          return cls.__instance	

单例类

属性property

让外部对象可以像调用属性一样调用私有方法

  • 第一种写法
class Temp(object):
    	def __init__(self):
            	self.__num = 100  # 私有属性
         def setNum(self, n):
            	self.__num = n
         def getNum(self):
            	return self.__num
		num = property(getNum, setNum)  # 注意参数不要写反了

property1

  • 另外一种写法
class Temp(object):
    	def __init__(self):
            	set.__num = 100
        @property
        def num(self):
            	return self.__num
         @num.setter
        def num(self, n):
            	self.__num = n
                
# 调用
t = Test()
t.num = 50
print(t.num)

property2


异常处理

结构使用

try:
    # 可能出现异常的代码
    pass
except.异常名称:
    # 出现异常后执行的程序
    pass
except Exception:
    # 和else类似,没有捕获到异常执行这部分程序
    pass
except Exception as ret:
    print(ret)  # 打印出具体的异常
else:
    # 没有异常才会执行的代码
    pass
finally:
    # 不管有没有异常都要执行的程序
    pass

抛出自定义异常

如下例子:

异常

捕获异常后抛出异常

# 例子:
try:
    return 11/0
except ZeroDivisionError as result:
    if xxx:
        # 输出捕获的异常
        print(result)
    else:
        # 重新抛出这个异常,此时不会被这个异常处理捕获到
        # 从而出发默认的异常处理,可以记入log日志中
        raise

raise


模块

模块,简单的说就是一个后缀为py的文件

导入

导入方式备注
import xxx全部导入
from xxx import *通常是全部导入(看__all__)
from xxx import yyy只导入xxx中的yyy

__all__

写在模块文件的开头

__all__ = ['xxx', 'yyy', .......]

当用上面第二种方式导入的时候,只能运用__all__列表中东西

all

一个文件夹下包含__init__.py和多个模块文件,我把这个文件夹称为包

注:必须包含__init__文件,python解释器才能认为这不是一个普通的文件夹,是一个包

我们可以在__init__.py文件中写入__all__,在用from 包名 import * 时,只会导入列表中的内容。

导入包的时候执行__init__.py文件

包

打包发布

首先,建立一个文件夹,文件夹下放入包和setup.py文件,setup.py中写入如下内容:

from distutils.core import setup
setup(name = "模块名", version = "版本号", description = "模块描述", author = "作者", py_modules = ['包名.模块名', ......])

然后运行如下命令:

python3 setup.py build  # 构建模块
python3 setup.py sdist  # 生成发布的压缩包

如果别人想用这个代码,拿到压缩包后进行如下步骤:

解压
python3 setup.py install

我们用上面的demo包来做一个示范:

把包放入一个文件夹中,并写如setup.py文件

第一步

构建模块:

第二步

生成发布压缩包:

第三步

如图所示,生成了一些文件,我们来看看文件的内容

添加搜索路径

import sys  # 导入这个模块
sys.path.append('包的路径')  # sys.path是一个包含搜索路径的列表,用列表方法来添加路径

模块的重新导入

程序导入模块后,模块代码可被修改,重导入

# 这是在不结束程序的前提下
from imp import *
reload(xxx)  # 直接更新代码模块

生成器

一边循环,一边计算的机制,称为生成器:generator

  • 创建生成器的方法一:把列表生成式的[]改为()

生成器

  • 创建生成器的方法二:用yield关键字

生成器

  • 得到生成器下一个值的几种方法
next(生成器对象)
生成器对象.__next__()
生成器对象.send(None)

装饰器

Python语法糖——装饰器

  • 用装饰器给函数添加额外功能
def x(func):
      def inter():
          func()
      return inter
  
  @x  # 语法糖
  def y():
      print('hello')

可以参考一下例子,知道装饰器的执行顺序:

  • 装饰带参数的函数

  • 装饰有不定长参的函数



以上是我整理的Python基础学习笔记,如有错误,欢迎邮箱反馈,基本学习过程中常用的东西我都写了,当然,也有写得不完整的地方,同样,欢迎邮箱交流。如果对你有帮助的话,打赏一瓶可乐吧(.)。。。感谢支持

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值