2020年2月

表达式

C语言中关于表达式的定义:表达式(Expression)是运算符(operator)和操作数(operand)所构成的序列。

1+1
a = [1,2,3]
a > b
1 + 2 * 3 # 有顺序
c = int('1') + 2 # 可调用函数

以上全部都是表达式。

优先级

a = 1
b = 2
c = 3
a + b * c # 7
a or b and c # 1  先计算 b and c, 返回3,再计算 a or 3,返回1

Python 优先级排序(查资料)

同优先级运算从左到右计算,否则按照优先级从高到低运算,如果需要刻意改变优先级,可使用()包含。
没有赋值运算符 = ,左结合,存在赋值运算符,右结合。

优先级:算数运算符 > 比较运算符 > 逻辑运算符。
not > and > or。

not 1 or 2 + 2 == 2 # 先计算2+2,然后计算4==4,再计算 not 1,得到结果False or False 返回False 

条件控制

python中的条件控制可以通过使用 if else,if elif else来实现,语法:

# if else 语法
if condition:
    pass
else:
    code

# if elif else 语法
if condition:
    code1
elif condition2:
    code2
else
    code3

!!! python中并没有switch语法,不过我们可以借助if elif 来实现同样的功能。
相关文档:https://docs.python.org/3/faq/design.html

循环控制

python中的循环控制可以使用while和for来实现,while循环尝试用在递归操作中,而for循环则常常用来遍历序列,集合,字典等。

while循环语法

CONDITION = True
while CONDITION:
    pass
# 以上是一个无限循环/死循环
count = 0
while count <= 11:
    count += 1
    print(count,end="|")
# 输出 0|1|2|3|4|5|6|7|8|9|10|

for 循环语法
下面的代码分别实现了循环输出一个列表和嵌套列表。

#列表循环
a = ['a','b','c','d']
for x in a:
    print(x)

# 列表和元组嵌套的场景
l = [['a','b','c','d'],(1,2,3)] 
for b in l:
    for c in b:
        print(c,end=' ')

# for else 用法
l = [['a','b','c','d'],(1,2,3)] 
for b in l:
    for c in b:
        print(c,end=' ')
else:
    print('遍历完成')

跳出语句 break continue

break 和 continue 仅能跳出当前循环,使用时应当注意。

# break

l =  ['a','b','c','d'] 
# 遇到 'c' 跳出
for c in l:
    if c == 'c':
        break
    print(c)
#  输出 ['a','b'] 

l =  ['a','b','c','d'] 
# continue 跳过c 输出
for c in l:
    if c == 'c':
        continue
    print(c,end='|')
#  输出  ['a','b','d'] 

可以借助range方法和for实现重复执行10次
range函数的用法:
range(start,end,step)

for x in range(0,10,2):
    print(x,end="|")
print('\r')
#  输出 0|2|4|6|8|

输出等差数列

for x in range(20,0,-2):
    print(x,end="|")
print('\r')
#  输出 18|16|14|12|10|...

打印指定间隔元素

l = [1,2,3,4,5,6,7,8,9,10]
for x in range(0,10,2):
    print(l[x],end="|")
print('\r')
# 输出 1|3|5|7|9|
 
# 改进

l = [1,2,3,4,5,6,7,8,9,10]
for x in range(0,len(l),2):
    print(l[x],end="|")
print('\r')
# 输出 1|3|5|7|9|

列表的切片可以通过如下方式实现:

l = [1,2,3,4,5,6,7,8,9,10]
s = l[0:len(l):2]
print(s)
# 输出 [1, 3, 5, 7, 9]

变量赋值操作(赋值符号 =

# 未使用变量
[1,2,3,4]*3+[1,2,3]+[1,2,3,4]
# [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 4]
# 变量
a = [1,2,3,4] # 赋值
b = [1,2,3]  
a*3+b+a # 运算

Python变量名对大小写敏感,给变量起名一定要有意义,增强可读性,例如 skill,goodsId...
变量名可以使用数字,字母,下划线组成,首字母不能是数字。

_config ='config info"
user_info = 'user'

也不能用系统保留字作为变量名.
python 中的变量无需申明变量类型

float a = 10.0 
a = 10.0

注意以下现象:

a = 1
b = a
a = 3
print(b)
# 1 b没有随着a改变

a = [1,2,3]
b = a
a[0] = 6
print(b)
# [6,2,3] b 随着a变化

值类型和引用类型

值类型不可变,引用类型可变
int str tuple是值类型 list set dict是引用类型

a = "hello"
id(a) = 6522010 # 内容地址
a = a + "world" 
id(a) = 6522966 # 内存地址 
print(a) # hello world

列表修改

b  = [1,2,3] # 定义列表
b.append(4)
print(b) # [1,2,3,4] 可动态改变

元组不可追加,不可修改

(1,2,3) # 元组
a[2] = 1 # 报错 !!!

运算符

1.算数

算数运算符
+-*///%**
求和乘积整除求余乘方

!!! Python 中没有自增++ 和自减 --运算符

2.赋值

赋值运算符
=+=*=/=%=**=//=
赋值先求和再赋值先求积再赋值先除再赋值先求余再赋值先乘方再赋值先整除再赋值知

3.比较

比较运算符
==!=>>=<<=
等于不等大于大于等于小于小于等于

以下代码需要重点理解:

'abc' < 'abd' # ASII码逐个比较 a < a? b < b ? c < d? 序列特性
[1,2,3] < [1,2,4] # True
(1,2,3) > (1,2,4) # False
(1,2,3) < (2,1,3) # True  得到结果即返回
# 集合,字典同样是适用

4.逻辑

逻辑运算符
andornot
两个为真返回真一个为真返回真not True = False

int float
0False , 非0均为True
str
''False, '0'True
list
[]False

5.成员运算符

成员运算符
in是否在 1 in [1,2,3,4] 返回 True
not in是否不在 6 not in (1,3,4) True

成员运算符支持所有序列,包括字符串,元组,列表,集合,字典

a = 'key'
a in {'key':1} # True  成员运算符在字典中仅适用于key 查询
a in {'1':'key'} # False 
'a' in 'action'  # True

5.身份运算符

身份运算符
is
not is不是
a = 1
b = 1.0
a == b # True 关系运算符对值比较
a is b /# False 身份运算,比较内存地址
{2,1,3} == {1,2,3} # 集合 True 无序列表元素顺序不影响值
(1,2,3) == (2,1,3) # 元组 False 元组属于有序,会

关系运算符对值比较,身份运算比较内存地址;
变量类型判断

a = 1
isinstance(a,(int,float,str))

对象的三个特征: id、值、类型

5.位运算符

位运算符
&Ι^~<<>>
按位与按位或按位异或按位取反左移动右移动

按位与理解
把数字转成2进制后每一位进行比较,如果相同则返回1,不同则返回0

 #  2: 0b10
 #  3: 0b11
2 & 3
# 0b10
# 0b11
# 0b10 
# output:2   0b10
2 | 3
# 0b10
# 0b11
# 0b11 
# output: 3    0b11

nubmber 数字类型(整数(int),浮点数/小数(float)

>>> type(1)
<class 'int'>
>>>type(2/2)
<class 'float'>
>>>type(2//2) 
<class 'int'>

2进制,8进制,16进制

  • 十进制:10
  • 二进制: 0b10 (2)
  • 八进制:0O10 (8)
  • 十六进制: 0x1F(16)

进制转换:

  • 转换成二进制

       bin(10)
  • 转换成八进制

       oct(10)
  • 转换成十六进制

       hex(10)
    

bool 布尔类型:表示真和假的状态

True # 真 (非0非空)
False #  假 (0或none)
# Python中的True和False首字母必须大写

complex 复数

    36j # 表示复数

str 字符串

单引号,双引号,三引号表示字符串

'python'
"python"

三引号用来换行

'''
hello
hello
'''

"""
hello
hello """

转义字符 \
用来表示无法看见的字符,或者与语言本身冲突的字符

\n # 换行
\t # tab
\r # 回车

换行符 \

"hello\
world"

输出路径的方法

print(r'C:\windows\system32\bin')
# r用来申明原始字符串,大小写不敏感
print('C:\\windows\\system32\\bin')

字符串操作:

字符串运算

"hello"+"world" # 输出 hello world
"hello" * 3  # 输出 hello hello hello
"hello"[0] # 输入h 正序
"hello"[-1] # 输出 o 倒序
"hello world"[0:5] # 切片 输出 hello  
"hello world"[0:-1] # 切片 输出 hello worl
"hello python java #c javascript php"[6:] # 切片 输出 python java #c javascript php
"hello python java #c javascript php"[-3:] # 切片 输出 php

组/序列

表示组的方式有很多种:列表
列表list,元素可加入多种类型,可嵌套:

[1,2,3,4,5,6,'呵呵',True,['a','c']]

访问列表元素:

['烤包子','大盘鸡','抓饭','烤肉','过油肉拌面']
['烤包子','大盘鸡','抓饭','烤肉','过油肉拌面'][0] # 烤包子
['烤包子','大盘鸡','抓饭','烤肉','过油肉拌面'][0:2] # ['烤包子','大盘鸡'] 切片操作
['烤包子','大盘鸡','抓饭','烤肉','过油肉拌面'][-1:] # ['过油肉拌面']

列表追加:

['1']+['b'] # ['1','b']

元组tuple,可参考列表
当元组中只有唯一一个元素时,元组将转换成该元素的类型

(1) # int
("string") # str

申明单个元素的元组

(1,) # tuple
("string",) # tuple

空元组

() # tuple

* 字符串,列表,元组均可看作是序列 *

延申:

逻辑运算

3 in [1,2,4,5] # False
3 not in [1,2,4,5] # True

常用计算

len('python') # 6 
max([1,3,7]) # 7
min([1,3,7]) # 1
max('python') # y 按照ASII码值排序
min('python') # h 字符串用空格会输出空格
ord('w') # 119

集合 set

区别于序列,集合时无序的一组元素组成的对象,集合会自动剔除重复的元素

集合的表示:

{1,2,3,4}
{1,2,3,4}[0] # 报错!!!
{1,1,3,4,6,6} # {1,3,4,6}

集合的操作:

len{1,2,3} # 3 获取长度
3 in {1,2,3} # True 判断集合中是否存在某元素
{1,2,3,4,5} - {3,4} # {1,2,5} 求集合的差集
{1,2,3,4,5} & {3,4} # {3,4} 求集合的交集
{1,2,3,4,5} | {3,4,7} # {1,2,3,4,5,7} 求集合的并集
set() //定义空集合

字典 dict

由很多键值对组成的集合, 字典中的键不能重复,键值必须时不可变的类型,字典可以嵌套

{key1:vaule1,key2:value2}
{'title':'内容标题','tag':{'mind':'心理学','development':'编程开发'},'content':'这是内容'}
joh = {'name':'Joh','age':29}
joh['name] # Joh