Python基础学习-Day1
Python基础学习-Day1
Python是一个大家都非常熟悉的软件,能用来做前端后端,非常火爆且语法简单。但对于我来说,实在是太过陌生,因此我决定有必要重新打好基础,直到自己能准确快速的默写出代码为止。我会将自己所阅读的内容以及理解放到这里,并标明出处,侵删。
学习内容
今天的学习内容主要都是以Python的基础语法为主,懂得相关的基础知识,才能在日后更快更直接的读懂代码的含义。
Python的语法
为了了解变量、运算符、数据类型、位运算等,先从python的语法开始学习。
Python的语法主要从以下四个方面入手:
- 命名规则
- 缩进原则
- 特殊关键字
- 特殊运算符
命名规则
命名方面有如下规则需要我们谨记(嫌字多的看加粗即可):
- 变量名只能包含字母、数字、下划线。变量名可以用字母或下划线打头,但不能以数字打头。比如,我们可以用pppgu_1,但不能用1_pppgu。
- 变量名不能含有空格,只能用下划线来分割单词。比如,可以用pppgu_1,但是不能pppgu 1。
- Python中不能将关键字和函数名作为变量名,就是Python软件中有特殊作用的词,都不能拿来做变量名,比如print。
- 变量名最好简单易懂,具有描述性。
- 尽量不要用小写字母l和大写字母O,会被误认为数字1和0。
另外,Python中以下划线“_”开头是有特殊意义的。
- 类变量若以单下划线(_)开头,代表不能直接被访问。
- 类变量若以双下划(__)开头,表示为类的私有成员,不能被导入和其他类变量访问。
- 以双下划开头和双下划线结尾的变量是 Python 里的专用标识,有特殊的身份。
缩进原则
Python的缩进很简单,一般来说,如果用的是Pycharm的话,格式不对的话它会直接对你进行提示,我们只用点击即可。用Spider的话,格式不对会在当前行的代码序号前出现感叹号,显示格式有误,这时候我们可能就需要用tab一下。
一般我们用def或者if这些固定语句时,按下enter键,软件会自动调节到合适的位置让我们继续编写。Python 的缩进方法,一般为 4 个字符。
特殊关键字
前面的命名原则第三条:Python中不能将关键字和函数名作为变量名。这里呢直接附上参考资料的图吧。(懒)
特殊运算符
Python的运算符很多,包括:
+ - * ** / // % @
<< >> & | ^ ~ := <
> <= >= == != and or not
其中,包含了算术运算符、比较运算符、逻辑运算符以及位运算符。
想必算术运算符,是再简单不过了,无非便是加减乘除等用法。
-
+ - * ** / // %
比较运算符则是上面的,大于小于,大于等于,小于等于,不等于
-
<= >= == != > <
逻辑运算符则是一些基本的逻辑用词了,对应的and = 与,or = 或,not = 非
-
and or not
而位运算法居然让我理解了好一会儿,便单独展开记录一下吧。
位运算符
位运算符有:
操作符 | 名称 |
---|---|
~ | 按位取反 |
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
<< | 左移 |
>> | 右移 |
- 非0即1,非1即0
# 按位非操作
~0 = 1
~1 = 0
- 与、或、异或
# 与
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
# 或
1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0
# 异或
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0
简单来说:
与,可以理解为and,交集,只有A和B都是1,结果才为1,否则为0
或,可以理解为or,并集,只有A或B其中一个为1,结果才为1,否则为0
异或,可以理解为将或反过来,只要A或B不同为1,结果才为1,否则为0
而他们的运算,是根据二进制来运算的。下面便是一个例子。
与运算:5&3计算过程为 0101(2)&0011(2)=0001(2)=1
意思是把两个数全部转换为二进制进行比较,5的二进制为0101,3的二进制为0011.则这两个数的二进制数种第一位相同,取一,其余全部取零。得0001,再转换为十进制结果为1。再举个例子:
30 & 45 = 12
即30=(011110), 45=(101101)位运算得12(1100)
其余三种位运算与此相同,需根据他们的原理来判断每位数是1还是0
2.或运算:5|3计算过程为 0101(2)|0011(2)=0111(2)=7
3.异或运算:5^3计算过程为 0101(2)^0011(2)=0110(2)=6
- 左移、右移
首先要知道是二进制按位移动,且用0补位。举个例子
00 00 10 11 --> 11 # 二进制00 00 10 11 等于11
11 << 3 # 将11的二进制往左移3位,便可得到下面的值
01 01 10 00 # 左移三位的结果
01 01 10 00 --> 88 # 转换成10进制便是 88
右移同理。
其他运算符
操作符 | 名称 |
---|---|
is | 是 |
not is | 不是 |
in | 存在 |
not in | 不存在 |
理解很简单,见代码:
letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G'] if 'A' in letters:
print('A' + ' exists')
if 'h' not in letters:
print('h' + ' not exists')
# 变量都是不可变类型
a = "hello"
b = "hello"
print(a is b, a == b)
这里需要注意的是:
- is, is not 对比的是两个变量的内存地址
- ==, != 对比的是两个变量的值
即:
1、假如比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not和==,!=是完全等价的。
2、假如对比的两个变量,指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的。
运算符优先级
- 一元运算符优于二元运算符。如正负号。
- 算术运算 > 移位运算 > 位运算
- 逻辑运算最后算
print(-3 ** 2) # -9
print(3 ** -2) # 0.1111111111111111
print(-3 * 2 + 5 / -2 - 4) # -12.5
print(3 < 4 and 4 < 5) # True
数据类型与转换
Python中的基本数据类型如下。我们一般最常接触到的就是字符串和数值型数据。今天先简单阐述这两种数据类型。
字符串,就是一系列的字符。用引号(单引号/双引号都行)括起来的都算作字符串。比如:
a = "真的好棒呀我好喜欢"
这句话就是字符串变量,我们在变量栏里可以看到str,这便代表着字符串的意思。
数值型数据,则有整数int,浮点数float等。带有小数点的数字都叫浮点数。相同的数据类型可以互相相加相乘相减等等一些事,但如果不同就会报错。比如:
age = 22
message = "pppgu " + "is " + str(age) + " years " + "old"
print(message)
还有一种特殊的数据类型叫做:bool类型。该类型只能取两个值,一个是True,另一个是False。
获取类型的信息
用type(object)以及isinstance(object, classinfo)即可得到信息。
print(type(1)) # <class 'int'>
print(type(5.2)) # <class 'float'>
print(type(True)) # <class 'bool'>
print(type('5.2')) # <class 'str'>
print(isinstance(1, int)) # True
print(isinstance(5.2, float)) # True
print(isinstance(True, bool)) # True
print(isinstance('5.2', str)) # True
两者的区别便在于:
type不会认为子类是一种父类类型,不考虑继承关系,而isinstance则相反。
如果要判断两个类型是否相同,最好就使用isinstance()
类型的转换
转换为整型:int(x, base=10)
转换为字符串: str(object=’’)
转换为浮点:float(x)
类型间转换 | 示例 |
---|---|
转换为整型 | int(x, base=10) |
转换为字符串 | str(object=’’) |
转换为浮点 | float(x) |
print(int('520')) # 520
print(int(520.52)) # 520
print(float('520.52')) # 520.52
print(float(520)) # 520.0
print(str(10 + 10)) # 20
print(str(10.1 + 5.2)) # 15.3
练习 Q&A
- 怎样对python中的代码进行注释?
- 短注释用# 长注释用’’’ ‘’’
- python有哪些运算符,这些运算符的优先级是怎样的
- 算术运算 > 移位运算 > 位运算
- python中is,is not与=,!= 的区别是什么?
- 具体须依变量类型而定,如果变量都是不可变类型
,那么他们便没有区别,变量是可变类型,那么is以及is not 所指的是变量地址是否相同,而is和isnot所指的是变量数值是否相同。
- python中包含哪些数据类型?这些数据类型之间如何转换?
- 整型 浮点 布林 字符串等
- int() float() str()
- leetcode习题136.只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。尝试使用位运算解决此题。
"""
Input file
example1: [2,2,1]
example2: [4,1,2,1,2]
Output file
result1: 1
result2: 4
"""
class Solution:
def singleNumber(self, nums: List[int]) -> int:
a = 0
for i in nums:
a ^= i
return a
# 老实说 上面的我出不来 我只能按下面的来了:
List1 = [2,2,1]
List2 = [4,1,2,1,2]
def singleNumber(nums):
a = 0
for i in nums:
a ^= i
return a
singleNumber(List1)
singleNumber(List2)