对象是Python中最基本的概念之一,在Python中一切皆对象
对象由数据和行为两个部分组成,而行为主要通过方法来实现,通过一些特殊方法的重写可以实现运算符重载。
这里有整数、实数、复数、字符串、列表、元组、字典、集合还有zip、map、enumerate、filter等对象,这里我有一点要强调一下,元组中如果只有一个元素的话,后面的逗号不能省略。如果对元组不熟悉,没关系,我会在接下来的专栏里详细介绍的,包学包会!
在Python中,不需要事先声明变量名及其类型,直接赋值即可创建任意类型的对象变量
也就是说不仅对象的值可以变化,变量的类型也可以随时发生改变
Python采用基于值的内存管理模式,也就是说Python中的变量并不直接存储值,而是存储了值的内存地址或者引用,这也是变量类型随时可以改变的原因。
定义Python变量名的时候,需要注意以下问题:
1.变量名须以字母或下划线开头,变量名可由字母数字下划线组成,数字不能做变量名开头;
2.不能使用关键字作变量名;
3.Python对大小写敏感(懂我意思吧)
那么接下来我们就先快速熟悉一下Python的一些基础知识
注意!我这个Python专栏前面的这几篇文章会比较浅显,因为我的目的是让大家对Python的基础内容有一个初步的了解,前面几篇是适合初学者的,越到后面我就会讲越深
首先让我们一揽全局,大致了解一下Python各个部分
一、数字
Python牛逼在于支持任意大的数字,具体可以大到什么程度仅受内存大小的限制。
要注意一点,由于精度问题,对于实数运算可能会有一定误差,应该以两者之差的绝对值是否小于某个特别小的EPS作为两实数是否相等的依据。
还有一点要注意,如果有过C类或者Java基础的同学应该知道,在数字的算术运算表达式求值时会进行隐式的类型转换。关于这一块也不用急,之后也会详细讲的!
Python内置支持复数类型及其运算
小知识点(Java也支持的):在数字中间位置使用单个下划线作为分隔来提高数字可读性
Python标准库中fractions中的Fraction对象支持分数运算,还提供了计算最大公约数gcd()函数和高精度实数类Decimal
标准库中的fractions和decimal中提供的Decimal类实现了更高精度的运算
二、字符串
在Python中没有字符常量和变量的概念,只有字符串类型的常量和变量,单个字符也是字符串。观察一下两个例子,发现到这个有意思的初始化方式了吗
Python 3.x除了支持Unicode编码的str类型字符串之外,还支持字符串类型bytes。对str类型的字符串调用其encode()方法进行编码得到bytes字节串,对bytes字节串调用其decode()方法并指定正确的编码格式则解码得到str字符串
三、列表、元组、字典、集合
Python还提供了range、map、zip、filter、enumerate、reversed等大量迭代对象(迭代对象可理解为表示数据流的对象,每次返回一个数据),大多具有惰性求值的特点,仅在需要时才给出新的元素,从而减少了内存的占用。
四、运算符和表达式
Python是面向对象的语言,在Python中一切皆对象!运算符就是表现对象行为的一种形式,不同类的对象支持的运算符有所不同,同一种运算符作用于不同的对象时也可能会表现出不同的行为,这正是“多态”的体现
- 算术运算符
1、+运算符用于加法或连接对象(只支持同类型的对象) - 2、*运算符用于乘法, 还可用于列表、元组、字符串这种序列类型与整数的乘法表示序列元素的重复,生成新的序列对象。字典和集合不支持与整数相乘,因为其中的元素不允许重复
3、/和//运算符分别表示除法和求整商,//向下取整(不论正负数) - 4、%运算符用于求余以及字符串格式化,但不推荐这种做法
- 5、**运算符用于幂乘,相当于内置函数pow()
- 关系运算符(前提:操作数之间可比较大小!!!)
< 、<=、>、>=、==、!=
- 成员测试运算符in与同一性测试运算符is
1、in用于测试一个对象是否为另一个对象的元素
2、is用来测试两个对象是否是同一个,如果是,则返回True,否则返回False。两个对象是同一个意味着两者具有相同的内存地址
- 集合运算符
- 位运算符和集合运算符
1、位运算符只能用于整数,其内部执行过程:先将整数转换为二进制数,然后右对齐,必要的时候左侧补0,按位进行运算,然后再把计算结果转换为十进制数字返回。
详细规则也可以参看这篇博文熄灯问题文末的的熄灯问题
位与运算&规则如下:全1为1,有0为0
1&1=1,1&0=0&1=0=0&0=0
位或运算|规则如下:全0为0,有1为1
1|1=1|0=0|1=1,0|0=0
位移或^运算规则为:1 ^ 1 = 0 ^ 0 = 0, 1 ^ 0 = 0 ^ 1 = 1 - 逻辑运算符and、or 、not
exp1 and exp2 <== > exp1 if not exp1 else exp2
exp1 or exp2 <===> exp1 if exp1 else exp2
and和or具有惰性求值和逻辑短路特点,在一定程度上确实提高了代码的运行速度。但值得注意的是and和or并不一定返回True或False,而是得到最后一个被计算的表达式值,而not是一定会返回True或False
这里来个小测试:求not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9
答案在图下方
因为按优先级由高到低:not > and > or
(not 1 ) or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8 and 9)
(False) or (0) or (4) or (6) or (9)
所以答案为4 - 矩阵乘法运算符@
这个运算符常与扩展库numpy一起用,另外@还可以表示修饰器的用法,之后我会讲到。
最后还有一点补充:
还有Python不支持++和–运算符,虽然有些时候貌似也用得了,但我劝大家还是别用,这涉及到线程那块的知识,咱们以后讲
精彩案例1
用户输入一个自然数,计算并输出其各个位的数字
这里用到了序列解包的思想,如果想详细了解,请跟着我看后面的博客吧
方法二、
传统思维
精彩案例2
已知三角形的两边长及其夹角,求第三边长
- 本文固定链接: https://huaxiatt.com/post/127.html
- 转载请注明: admin 于 红色航投 发表