目录
Python基础
1. 变量
- 变量赋值不需要类型声明
a = 1
- 允许同时为多个变量赋值
a = b = c = 1
- 为多个对象指定多个变量
a, b, c = 1, 2, 'john'
- 删除
del a,b
- 运算符
** 幂(a**b 即 a的b次幂)
// 取整除(返回商的整数部分)
in 包含在内(a in list 即 变量a在list中)
not in 不包含在内(a not in list 即 变量a不在list中)
is 有相同标识
is not 没有相同标识
代码样例:
a = 'hello world'
if 'or' in a:
print("a contain 'or'")
2. 语句
- input
Python2
a = raw_input() 输入自动转化为字符串类型
a = input() a的类型与输入类型一致
Python3
a = input() 输入自动转化为字符串类型
- print区别
Python2 print a
Python3 print(a)
以上输出自动换行,如下为输出不换行:
Python2 print a,
Python3 print(a, end='')
字符串的输出:
print("My name is %s and weight is %d kg!" % ('Zara', 21))
My name is Zara and weight is 21 kg!
- 注释
# 注释一行
``` 注释多行
- 条件语句
代码样例:
a = 0
if a == 3:
print('a')
elif 1 < a < 10 or a == 0:
print('b')
else:
print('c')
- 循环语句
while循环代码样例:
count = 0
while count < 5:
count = count + 1
else:
print(count, " is not less than 5")
for循环代码样例:
for num in range(10, 15):
print('a')
else:
print('b')
Python中没有do...while循环
注意事项:
1)while和for中,else语句会在循环正常执行完执行
2)while循环和for循环可以嵌套
3)range(start, stop, step) 从start(默认是0)开始到stop(必须有)结束,但不包括stop,步长为step(默认是1)
range(0, 10, 3)即[0, 3, 6, 9]
- break、continue、pass
break 跳出最小封闭for或while循环
continue 跳过当前循环的剩余语句,继续下一轮循环
pass 不做任何事情,为了保持程序结构的完整性
3. 列表
- 列表的数据项不需要具有相同的类型,形如
['physics', 'chemistry', 1997, 2000]
- [头下表:尾下表]截取相应的字符串或列表(字符串、元组同理)
从左到右索引默认0开始的,最大范围是字符串长度少1
从右到左索引默认-1开始的,最大范围是字符串开头
A B C D
0 1 2 3
-4 -3 -2 -1
从头取到尾,但不包括尾。没有尾则默认取到结尾
代码样例:
a = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(a[1:5])
print(a[4:])
print(a[:2])
运行结果:
['b', 'c', 'd', 'e']
['e', 'f', 'g']
- 添加元素
尾部添加 a.append(element)
在index+1添加元素 a.insert(index, element)
- 删除元素
删除元素 del a[index]
删除尾部数据 a.pop(index)
删除第一个指定的值 a.remove(value)
4. 元组
- 元组中只包含一个元素时,需要在元素后面添加逗号
a = ('a', )
- 元组与列表相似,但元组的元素不能修改
- 若元组中包含列表,则列表中的元素可更改
样例代码:
a = ('a', 'b', ['c', 'd'], 'e', 'f', 'g')
print(a)
a[2][1] = 'z'
print(a)
运行结果:
('a', 'b', ['c', 'd'], 'e', 'f', 'g')
('a', 'b', ['c', 'z'], 'e', 'f', 'g')
5. 字典
- 键值对
d = {key1: value1,key2: value2}
- 值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组
- 不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住
代码样例:
a = dict()
a['name'] = 'aaa'
a['age'] = 12
for key, value in a.items():
print(key, ':', value)
print(a)
del a['age']
print(a)
运行结果:
name : aaa
age : 12
{'name': 'aaa', 'age': 12}
{'name': 'aaa'}
6. 函数
- 参数传递
不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a(如 整数、字符串、元组)
可变类型:变量赋值 a=[1,2,3,4] 后再赋值 a[2]=5 则是将a的第三个元素值更改,本身a没有动,只是其内部的一部分值被修改了(如 列表、字典)
代码样例 1:
def ChangeInt(b):
b = 10
b = 2
ChangeInt(b)
print(b)
运行结果:
2
代码样例 2:
def change(list):
list.append([1, 2, 3, 4])
print("函数内取值: ", list)
return
list = [10, 20, 30]
change(list)
print("函数外取值: ", list)
运行结果:
函数内取值: [10, 20, 30, [1, 2, 3, 4]]
函数外取值: [10, 20, 30, [1, 2, 3, 4]]
- 元素或列表和字典传递参数
代码样例:
def f(a=0, *args, **kw):
print(a)
print(args)
print(kw)
a = [1, 2, 3]
d = {'name': 'aaa', 'age': 12}
f(*a, **d)
运行结果:
1
(2, 3)
{'name': 'aaa', 'age': 12}
- 全局变量和局部变量
代码样例:
total = 0
def sum(arg1, arg2):
total = arg1 + arg2
print("函数内是局部变量 : ", total)
return total
sum(10, 20)
print("函数外是全局变量 : ", total)
运行结果:
函数内是局部变量 : 30
函数外是全局变量 : 0
n. 强调
-
空列表、空元组不为None
代码样例:
a = []
b = ()
c = None
print('a: %s' % type(a))
print('b: %s' % type(b))
print('c: %s' % type(c))
if a is None:
print('a is null')
else:
print('a is not null')
if b is None:
print('b is null')
else:
print('b is not null')
if c is None:
print('c is null')
else:
print('c is not null')
运行结果:
a: <class 'list'>
b: <class 'tuple'>
c: <class 'NoneType'>
a is not null
b is not null
c is null
None相当于空指针,是不分配内存空间的,而[]已经分配了列表的内存空间,只不过列表内存空间为空,()同理
-
python 中,类型属于对象,变量是没有类型的
代码样例:
a = 3
b = 3
print(id(a))
print(id(b))
a = [1, 2]
b = [1, 2]
print(id(a))
print(id(b))
a = "12"
b = "12"
print(id(a))
print(id(b))
运行结果:
140713555920608
140713555920608
1987407465280
1987407464448
1987406285040
1987406285040
通过id()函数取出变量地址。由此可见,Python中的整数、字符串一直是同一个地址,是不变的,变得只有变量名,变量名就像一个指向固定地址的指针,而列表是可变的,新建的列表会分配新的地址
总结
这其中仍有许多需要注意的细节,我也只是对我需要用到的部分做一些整理
参考资料:Python菜鸟教程