Python | 一、变量赋值、基础数据类型、格式化说明符、输入输出、循环、条件判断、数学运算、位运算等

Python基础内容

Python的特性

  • 我在C++基础里的文章中有介绍过一些Python和C++的区别
  • 这里想要额外添加一点,就是Python为什么比C++等很多语言的运算速度要慢,参考链接
    • 第一,python是动态类型的语言,所谓动态,主要指的是python里面的变量在定义时是不声明类型的,因此代码执行时会增加变量类型判断的步骤;此外,当变量类型转换时,将会发生额外的内存释放和重新分配,造成性能损失
    • 第二,python是解释型语言,因此,逐行解释并执行的方式带给了它天然的降速,很难在效率上与C++等编译型语言相比
    • 第三,GIL锁的存在,使得python的多线程执行受到了限制(有关GIL锁我的了解并不多,感兴趣的朋友可以利用搜索引擎自行深入了解)

模块和主模块

  • Python代码中,通常会有一个主模块main.py,标志着整个Python项目的主程序
  • __name__用来标识模块是在其定义所在的.py文件中执行的还是被其它.py文件调用后再执行的
    • 当模块是在其定义所在的.py文件中执行时,其__name__等于__main__
    • 当模块被其它.py文件调用时,其__name__等于模块的文件名
  • 主模块为程序的入口,其.py文件中通常会包含以下代码
 if __name__ == '__main__':
 	# 主模块程序

变量的初始化

  • 在Python中,如果没有对变量进行初始化操作,则解释器会自动为该变量赋值为关键字None,代表空值
  • 多重赋值
a, b = 1, 2 # a和b将分别为1和2 (实际调用了元组解包,详见[下一篇文章](https://blog.csdn.net/weixin_45055622/article/details/135364974?spm=1001.2014.3001.5501))
a, b = [1, 2] # a和b将分别为1和2

变量的赋值

  • 参考链接
  • 对于不可变类型的变量(整型、浮点型、字符串、元组),赋值都是复制了一份当前内容到新的变量里,而不是引用,因此不用担心值的变动会同步到原来的变量里
  • 但是对于可变类型的变量(列表、字典、集合等)
    • 直接赋值a=b,a此时为b的引用,a和b同步修改
    • 浅拷贝,拷贝外层,即对外层数据开辟新的内存空间,如对嵌套列表initial_list进行浅拷贝为new_list,此时如果只对外层列表进行操作,则二者独立,若对内层列表进行操作,则会发现二者仍同步修改(具体见参考链接的示例)。浅拷贝包括以下三种情况:
      • 切片赋值,如a = b[:]
      • 工厂函数,如a = list(b)
      • copy模块中的copy函数,如a = copy.copy(b)
    • 深拷贝,产生完全独立的复制对象,这只能通过copy模块里的deepcopy函数实现
      • copy模块中的deepcopy函数,如a = copy.deepcopy(b)

基础数据类型

  • 数字
    • 整数——int
    • 浮点数——float
    • 复数——complex
      • 复数的实部和虚部可以由其realimag属性进行访问
      • 标准的复数格式为a + bj,其中虚部必须以j或者J结尾
  • 布尔
    • bool
      • True=1
      • False=0
  • 字符(串)(对应卡码网多道题,如1/10/11等)
    • string,用‘’或“”括起来
    • length = len(string)可以获取字符串的长度
    • new_list = string.split()字符串分割函数
      • 默认按照字符串中的空格进行分割,分割结果保存为列表形式
      • 可以通过split(‘,’)的形式指定分割符,如前面的例子就是指定逗号为分割符
    • new_string = string.join(list)字符串连接函数
      • 把列表 list 中的字符串以 string 为分隔符进行连接并返回,相当于split的反向操作
    • new_string = string.replace('1', '2')字符串替换函数
      • 把字符串中的字符‘1’替换为‘2’
    • 字符串中字母字符的大小写转换
      • 判断一个字符是大写字母还是小写字母分别用string.isupper()string.islower()
      • 转换一个字符为大写字母或小写字母分别为string.upper()string.lower()
    • 字符串格式化(推荐方式二)
      • 方式一,format方法,"string{}".format(insert_string),其中{}即为占位符,format函数将会把传入的insert_string替换到占位符的位置上,如"today{:.2f}.format(12.147)"的结果为"today12.14",其中:.2f表示保留两位小数`
      • 方式二(推荐),f字符串,在python3.6及之后,支持如f"姓名:{variable}"的格式,以f开头,后面的字符串将会自动把{}里的变量variable替换到该大括号占位符的位置
      • 方式三,使用%操作符,该方式会将%后的变量一一替换到前面的占位符上,其中%s表示字符串,%d表示整数,%f表示浮点数,示例如
`"姓名:%s,年龄:%d,体重:%f" % ("David", 20, 63.5)`

格式化说明符

  • 如前面字符串格式化所用的:.2f就是格式化说明符
  • 格式化说明符在Python字符串格式化中起着重要作用,它们用于指定变量或表达式的格式。这些说明符通常跟在冒号后面,用于定义值的显示格式,包括类型、宽度、精度、对齐方式等。
  • 在Python中,格式化说明符可以用在旧式的 % 格式化、str.format() 方法以及f-strings中。下面是一些常见格式化说明符的介绍:
      1. 类型
      • d: 整数。
      • f: 浮点数。可以指定小数点后的精度。
      • s: 字符串。
      • b: 二进制数。
      • o: 八进制数。
      • x 或 X: 十六进制数(小写/大写)。
      • e 或 E: 科学计数法表示的浮点数(小写/大写)。
      • %: 百分比格式。
      1. 宽度和精度
      • 宽度: 指定最小字段宽度。如果值的字符数小于此宽度,结果将根据对齐方式填充空格。
      • 精度: 通常用于浮点数和字符串,指定小数点后的数字数量或最大输出字符数。
      • 例如:{:.2f} 表示格式化为浮点数,保留两位小数。
      1. 对齐和填充
      • <: 左对齐。
      • >: 右对齐。
      • ^: 居中对齐。
      • 0: 使用0填充空白。
      • 例如:{:>10} 表示右对齐,宽度为10的字段。
      1. 符号
      • +: 总是显示符号(正数显示+,负数显示-)。
      • -: 只有负数显示符号(默认行为)。
      • 空格: 正数前加空格,负数显示-。
      • 例如:{:+f} 和 {:-f}。
      1. 百分比
      • %: 将数值乘以100并显示为百分比,后跟一个百分号。
      • 例如:{:.2%} 会将数值转换为带有两位小数的百分比形式。
    • 结合使用
      • 这些格式化说明符可以组合使用,以实现更复杂的格式化。例如,{:>10.2f} 表示一个右对齐的、宽度为10的字段,其中浮点数保留两位小数。这种灵活性使得Python字符串格式化非常强大且易于使用。

Unicode编码

  • 在各类编程语言中,Unicode编码都得到了广泛的应用,它将每个字符和整数码值一一对应起来,从而使得字符可以被直接比较大小(实际python比较的是其对应的码值),如'a' < 'z'
  • 在python中,可以通过ord('string')的格式获取字符串的对应码值(ord是ordinal的缩写,即序数)
  • 大写字母A到Z的Unicode编码从65到90,小写字母a到z的Unicode编码从97到122,二者差值为32,因此可以通过先ord('string)把字母转换为对应的Unicode编码值,减去32后,再chr(number)转换回字母字符得到对应的大写字母(另一种转换方法可以直接用python的字符串内置函数upper和lower,具体见上面的基础数据类型里)(chr是character的缩写)

数据类型转换

  • python中包括显式类型转换和隐式类型转换
  • 显式类型转换
    • 如使用int(), float(), str(), bool()进行类型转换
  • 隐式类型转换
    • python自动执行的类型转换
    • 如执行int型和float型的运算时,python会自动把int型变量转换为float再进行运算
    • 再如进行条件判断时,所有非0数都会被转换为True,0会被转换为False

基础输入输出

  • 输入函数
    • input()
      • 返回类型为str,如需要其他类型可以外套类型转换
      • 可以在括号内添加提示语,如input('请输入一个数字’)
      • 读取时读到回车(换行符)结束(读取内容不包括换行符)
  • 输出函数
    • print()
      • 可以自定义结尾符,如print(a, end = ' ')即表示用空格结尾,默认是用\n即换行符结尾
      • 可以自定义分隔符,所谓分割符,即使用print打印多个对象时,不同对象用什么分隔。默认情况下,使用空格分隔,如print('*', '*')将会输出* *,而如果是print('*', '*', sep='')则会输出**;如果不想自定义分隔符,但仍然希望连续多个字符对象,可以通过print('*' + '*')的方式使得多个对象连接为一个对象,此时输出也不会有空格(C++的字符串string类型中也支持这种字符串相加的操作)

sys模块

  • 包含一些和系统相关的变量和函数,常用于处理输入输出
  • 如sys.stdin可以取代input
  • 再如sys.stdout可以控制print的输出位置和格式,如sys.stdout = open("output.txt", "w")之后再执行print,内容将输出到output.txt文件里,更详细的解释见链接

循环

  • 写在前面
    • for循环使用的循环变量如果在循环内部进行更改,并不会在下一轮循环中从更改后的值开始,而是会继续按照for循环之前遍历到的地方继续,因此尽量避免在for循环中对其循环变量进行修改,可能达不到想要的效果
    • while循环由于天然地是在循环体内对循环变量进行修改,因此不会有上述问题
  • while循环
    • python里的queue.Queue对象不能直接作为while循环的判断条件,因为其不支持布尔值测试,(该类里没有进行布尔值转换的方法),因此当使用其作为判断条件时,由于该对象始终是一个对象,即条件为True,将发生无限循环(合理的方式是使用其empty方法来作为判断条件)
    • 列表可以直接作为while循环的判断条件,其为空的时候将自动转换为False
  • for循环
    • for a in b:,该语法将循环遍历b的每个元素,并在每次循环时把b对应的元素值赋给a,其中b可以是各种数据类型,如果是字典类型的话,需要采取for key, value in b:的格式,来分别接收键和值
    • for _ in b:,其中_表示一个占位符,其不会在循环内部使用
    • range内置函数的用法,for i in range(数字)
    range(5) # 返回0-4
    range(1, 5) # 返回1-4
    range(1, 5, 2) # 返回1和3,其中2代表步长
    range(5, -1, -1)  # 返回5,4,3,2,1,0
    
    • enumerate内置函数的用法,for index, element in enumerate(可遍历对象):
    enumerate(可遍历对象, start=0) # 返回可遍历对象的每
    # 个元素的索引和元素值,索引的起始值由start参数决定,
    # 如果不设置,默认为0
    
    • zip内置函数的用法
    a = [1,2,3]
    b = [4,5,6]
    c = [4,5,6,7,8]
    zipped = zip(a,b) # 返回一个对象<zip object at 0x103abc288>
    list(zipped) # list()转换为列表[(1, 4), (2, 5), (3, 6)]
    list(zip(a,c)) # 元素个数与最短的列表一致[(1, 4), (2, 5), (3, 6)]
    a1, a2 = zip(*zip(a,b)) # 与 zip 相反,zip(*) 可理解为解压,返回二维矩阵式
    list(a1) # 输出为[1, 2, 3]
    list(a2) # 输出为[4, 5, 6]
    

条件运算符(条件判断)

  • 基本语法语句1 if 条件判断 else 语句2,如果条件判断为真,则执行语句1,否则执行语句2
a, b = 7, 8
max = a if a > b else b
# 结果为max = 8
  • isnot==的区别
    • is 用来比较两个对象的身份是否相同,即它们是否是内存中的同一个对象
      • 需要注意的是,is 和 not不是一对相对应的关键字,not 是一个逻辑运算符,用于取反布尔值。如果某个表达式的结果是 True,则 not 会将其转换为 False
    • == 是用来比较两个对象的值是否相等。当两个对象的内容或值相同时,返回True
  • None常量
    • 在Python中,None不仅是一个标识空值的特殊常量,它还是一个设计为单例的对象。这意味着在Python的运行环境中,无论在代码中创建多少个None,所有的None实际上都指向内存中的同一个地址
      • 这种设计允许Python在任何时候通过简单的身份比较来检查一个变量是否为None。使用is操作符来判断变量是否为None是非常快速和高效的,因为它直接比较内存地址,而不是内容
  • 真值测试
    • 在Python中,以下对象在布尔上下文中被视为False
      • None
      • False
      • 任何数值类型的零(如0, 0.0, 0j)
      • 空的序列和集合(如’', (), [], {}, set(), range(0))
  • 判断列表变量是否为空的常用方法
    • 方式1,if not list:(空列表会被认为是False)
    • 方式2,if len(list) == 0:

常见的数学运算

  • 算术运算符
    • 除法/,在python3中,除法总是返回浮点数,如4/2返回2.0
    • 整除//,如5//2将返回2,只保留整数部分(向下取整,如5 // -2会返回-3)(如果想做到向0取整,可以在使用 / 的基础上对结果取int,则只会保留整数部分,也就变相实现了向0取整)
    • 取余%,如5%2将返回1,返回余数
    • 幂运算**,如2**2将返回4,即2的2次方
  • 一些常用的基础数学函数
    • abs(x): 返回数字的绝对值
    • max(x, y, z, …): 返回一组数据中的最大值,如print(abs(-10)) 将返回 -10的绝对值 10
    • min(x, y, z, …): 返回一组数据中的最小值,如print(max(1,2,3)) # 返回 3
    • pow(x, y): 返回 x 的 y 次方,参数为整数,如print(min(1,2,3)) # 返回 1
    • round(x):返回浮点数 x 的四舍五入值,如print(pow(10, 2)) # 100
  • 一些需要import math模块之后才能调用的数学运算
    • math.ceil(x): 返回一个大于或等于 x 的最小整数,如print(math.ceil(3.14)) # 4
    • math.floor(x): 向下取整,返回一个比 x 小的最大整数,如print(math.floor(-9.99)) # -10
    • math.pow(x, y): 返回 x 的 y 次方, math模块会把参数转换成浮点数,如print(math.pow(10, 2)) # 100.0
    • math.sqrt(x): 返回 x 的平方根,如print(math.sqrt(100)) # 10.0
  • 想要生成一个随机数,可以import random模块
    • 如生成一个随机数,位于区间 [0, 1) 之间:random.random()

位运算

  • &(按位与):对两个数的二进制表示进行按位与操作。只有对应位都为1时,结果位才为1,否则为0。例如:5 & 3 (二进制表示为101 & 011)结果为1(二进制表示为001)
  • |(按位或):对两个数的二进制表示进行按位或操作。只要对应位中有一个为1,结果位就为1。例如:5 | 3 (二进制表示为101 | 011)结果为7(二进制表示为111)
  • ^(按位异或):对两个数的二进制表示进行按位异或操作。只有对应位不同时,结果位才为1。如果对应位相同,则结果为0。例如:5 ^ 3 (二进制表示为101 ^ 011)结果为6(二进制表示为110)
  • ~(按位取反):对数的二进制表示的每一位进行取反操作。即0变1,1变0。需要注意的是,Python 中的按位取反操作是在补码表示下进行的。例如:~5 对5(二进制表示为…0000101)进行取反操作,结果为-6,因为它是5的二进制反码表示加1得到的
  • <<(左移):将数的二进制表示向左移动指定的位数。右边空出的位用0填充。这相当于乘以2的指定次方。例如:3 << 2 将3(二进制表示为011)向左移动2位,结果为12(二进制表示为1100)
  • >>(右移):将数的二进制表示向右移动指定的位数。对于正数,左边空出的位用0填充,而对于负数,则根据系统的实现,可能用0或1填充(在Python中,通常用符号位填充)。这相当于除以2的指定次方。例如:-14 >> 2 将-14向右移动2位,结果为-4,因为-14的二进制表示右移2位后得到-4的二进制表示
  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值