Python 初学笔记
目录
1. 基础知识
1.1 变量
1.1.1 变量名
- 变量名只能包含字母、数字和下划线,不能用数字打头、不能包含空格(可以用下划线分隔单词)、不要用python关键字和函数名、尽量使用小写变量名、慎用小写字母l和大写字母O(容易误被当作1或0)。
1.1.2 字符串
- 字符串中可以储存字母
- 可以用单引号也可以用双引号表示字符串变量:
"string"
'string'
t = "string"
print(type(t)) #结果:<class 'str'>
用加号 + 可以进行字符串的拼接:
a = "you"
b = 'nice'
c = a + ' are ' + b
print(c) #结果:you are nice
- 添加空白(非打印字符,可以是空格、制表符和换行符):
"\tstring" #\t是制表符
'\nstring' #\n是换行符
- 删除空白(Python认为字符有无空白是有很大区别的):使用lstrip()、rstrip()和strip()函数分别删除字符串开头、尾部和两端的空白
"\tstring" #\t是制表符
'\nstring' #\n是换行符
**注意:如果变量中有单引号,则必须用双引号表示字符串变量。
1.1.3 数字
- 包括整数和浮点数,但浮点数包含的小数位数具有不确定性
如输入:
0.2 + 0.1
则得到的输出为:0.30000000000000004
- 注意:在Python 2中,整数除法的结果只包含整数部分,小数部分不是被四舍五入,而是被直接删除。
1.2 列表
- python中用方括号[ ]来表示列表,逗号分隔不同元素。
names = ['qh','lkx','wwz',3,8.9]
print(names)
#输出结果:['qh', 'lkx', 'wwz', 3, 8.9]
1.2.1 访问列表中的元素
- 若要访问列表元素,可先指出列表的名称,并在方括号内指出元素的索引(注意元素索引从0开始而不是从1)。若索引为-1,则返回列表的最后一个元素。访问后元素或列表即可作为变量使用。
1.2.2 增、删、修改列表中的元素
- 修改:访问、重定义即可
names = ['qh','lkx','wwz',3,8.9]
print(names) #输出结果:['qh', 'lkx', 'wwz', 3, 8.9]
names[0] = "lcy"
print(names) #输出结果:['lcy', 'lkx', 'wwz', 3, 8.9]
- 增加:用append()函数可以在列表末尾添加元素;用insert()函数可以在列表任意位置添加新元素(要指定新元素的索引和值,第几个索引位置即出现添加的新元素)。
names.append(12.16)
print(names) #输出结果:['lcy', 'lkx', 'wwz', 3, 8.9, 12.16]
names.insert(2,'hd')
print(names) #输出结果:['lcy', 'lkx', 'hd', 'wwz', 3, 8.9, 12.16]
- 删除:用del语句,选择列表中元素的位置索引来进行删除;用pop()函数,如果括号里有索引则删除该位置的元素同时获取它的值,没有则默认删除列表中最后一个元素;用remove()函数删除列表中第一个为某个值的元素。
del names[0]
print(names) #输出结果:['lkx', 'hd', 'wwz', 3, 8.9, 12.16]
names = ['qh','lkx','wwz',3,8.9]
names[0] = "lcy"
names.append(12.16)
print(names)
print(names.pop(2))
print(names.pop())
#输出结果:['lcy', 'lkx', 'wwz', 3, 8.9, 12.16]
wwz
12.16
names = ['qh','lkx','wwz',3,8.9,'qh']
print(names)
name1 = names[0]
names.remove(name1)
print(names)
#输出结果: ['qh', 'lkx', 'wwz', 3, 8.9, 'qh']
['lkx', 'wwz', 3, 8.9, 'qh']
1.2.3 列表的组织
- 排序:永久性排序用sort()函数,此时原始列表被永久改变,可以用reverse = True进行反向排序;临时排序用sorted()函数。
age = [3,16,14,6,23]
age.sort()
print(age)
age = [3,16,14,6,23]
age.sort(reverse=True)
print(age)
#结果输出:[3, 6, 14, 16, 23]
[23, 16, 14, 6, 3]
age = [3,16,14,6,23]
print(sorted(age))
print(age)
#结果输出:[3, 6, 14, 16, 23]
[3, 16, 14, 6, 23]
- 列表倒置:reserve()函数
age = ['qh','lkx','wwz']
age.reverse()
print(age)
#结果输出:['wwz', 'lkx', 'qh']
- 确定列表长度:len()函数
age = ['qh','lkx','wwz']
len(age)
#结果输出:3
1.3 if 语句
1.3.1 条件测试
- 逻辑语句
相等运算符:==(区分大小写)
不等运算符:!=
其它数学比较:<、>、<=、>=
逻辑语句:and(同时检查多个条件)、or
lkx = 22
sl = 23
yrx = 16
lkx < 18 #False
sl >= 20 #True
yrx<20 and lkx>20 #True
yrx<20 or lkx<20 #True
- 特定值是否在列表的测验:用in或not in
names = ['qh','lkx','wwz',3,8.9]
3 in names #True
if(2 not in names):
print('xswl') #xswl
- 布尔表达式:是条件测试的别名,其结果要么为True ,要么为False(通常用于记录条件)。
1.3.2 if 语句格式
- python中if语句强制缩进,若条件通过则执行其后所有缩进的代码行,并且跳过余下所有的测试;
- 在有否定条件执行时候用 if-else 语句;
- 在多条件时候用 if-elif-else 语句;
- Python并不要求if-elif 结构后面必须有else 代码块,有时else可以省略(如果知道最终要测试的条件,应考虑使用elif 来代替else 以确保满足相应的条件时代码才会执行)。
- 注意:在运行for 循环前确定列表是否为空很重要
lkx = 22
sl = 23
yrx = 16
names = [lkx,sl,yrx]
--------------------------------
if(names[2] > 20):
print('You are young')
else:
print('Cool!')
--------------------------------
for i in names:
if(i > 22):
print('You are so cool')
elif(i <= 22 and i > 18):
print('You are nice')
else:
print('You are young')
#结果:You are nice
You are so cool
You are young
---------------------------------
1.4 Dictionary(字典)
1.4.1 基本用法
- 在python中字典指的是一系列键-值对,放在花括号{}中表示,一个键与一个值对应相关,不同键-值对用逗号隔开。
lkx = {'identity':'student','age':22,3:'team'}
print(lkx)
#输出结果:{'identity': 'student', 'age': 22, 3: 'team'}
- 引用键的时候用方括号[],直接指定 字典名[键]=值 即可添加键或修改键为新值,用del可以删除字典中的键-值对。
lkx = {'identity':'student','age':22,3:'team'}
lkx['position'] = 'IAP'
print(lkx)
#输出结果:{'identity': 'student', 'age': 22, 3: 'team', 'position': 'IAP'}
------------------------------------------------------------
lkx['position'] = 'CAU'
print(lkx)
#输出结果:{'identity': 'student', 'age': 22, 3: 'team', 'position': 'CAU'}
------------------------------------------------------------
del lkx['age']
print(lkx)
#输出结果:{'identity': 'student', 3: 'team', 'position': 'CAU'}
------------------------------------------------------------
- 使用多行定义字典:巧妙利用花括号{}、缩进和逗号,方便阅读和增添信息
name_oc = {
'p':'enso',
'a':'amoc',
's':'acc'
}
1.4.2 遍历字典
- 使用 .item() 返回字典中的所有键-值对, .keys() 则返回字典中所有的键, .values()返回字典中所有的值。
- 通常使用for循环进行引用。
name_oc = {
'p':'enso',
'a':'amoc',
's':'acc'
}
for k, v in name_oc.items():
print("\n" + k + ":")
print("Value:" + v)
--------------------------------------
#输出结果:
p:
Value:enso
a:
Value:amoc
s:
Value:acc
---------------------------------------
for k in name_oc.keys():
print(k)
#输出结果:
p
a
s
---------------------------------------
for v in name_oc.values():
print(v)
#输出结果:
enso
amoc
acc
- set()也可以用于提取字典中所有值,但返回没有重复项。
name_oc = {
'p':'enso',
'q':'acc',
'a':'amoc',
's':'acc'
}
for tea in set(name_oc.values()):
print(tea.title())
#结果输出:
Amoc
Acc
Enso
注意:由于遍历字典时键-值对的返回顺序可能与存储顺序不同,因此可以用sorted()进行排序后再输出。
1.4.3 嵌套字典与列表
2. 语法
- python的语法和我之前用过的NCL、R语言等不太相同,有一个句点( . ) 的概念,需要把操作对象放在前面,即对句点前的某变量执行句点后的某方法所规定的操作,每个方法后的括号用于储存额外信息以帮助完成该操作。
3. 函数及其用途(目前先按照我学到的顺序记录一下)
title() #以首字母大写的方式显示每个单词
upper() #把字符串全部改为大写
upper() #把字符串全部改为小写
rstrip() #删除字符串尾部空白
str() #将非字符串值表示为字符串
append() #在列表末尾添加元素
pop() #删除列表中某元素,同时获取它的值,默认为列尾。
remove() #删除列表中第一个为某个值的元素
sort() #永久性排序
sorted() #临时性排序
len() #确定列表长度
reserve() #倒置列表
in #检查特定值是否包含在列表中
not in #检查特定值是否不包含在列表中
del #删除某个值
items() #返回字典中的所有键-值对
keys() #返回字典中所有的键
values() #返回字典中所有的值
range() #返回一系列数字,告诉Python要重复这个循环多少次
callable() #返回函数是否是可调用,True/False
4. 类和对象
定义类使用class 关键字实现(其后的冒号是必备的):
class 类名:#类名最好定义清楚,如使用代表该类功能的单词,多个单词连接也可以,首字母大写,如"TheSmartStudent"
类属性 #包含在类中的变量
类方法 #包含类中的函数
类属性和类方法不是必需的,且没有固定的先后顺序,但同属一个类的所有类属性和类方法,要保持统一的缩进格式。
4.1 手动添加构造方法(函数)
def __init__(self,...): #此方法的名字开头和结尾各有 2 个下划线,且中间不能有空格
代码块
仅包含 self 参数的 init() 构造方法,又称为类的默认构造方法,会被python自动添加。
构建好之后则可以定投不缩进,直接调用前面创造的构造方法:
class TheSmartStudent:
def __init__(self,content):
print("你是最棒的")
Liu = TheSmartStudent()
输出结果为
5. 自定义函数
使用def()关键字定义
def FunctionName(x,y): #参数可以是1个也可以是多个,定义的时候是形式参数
函数体
return #需要返回值就用return
#到此为止只是声明了一个函数,它不能被执行,需要调用执行
FunctionName(3,7) #括号里在实际调用函数的时候改为实参
FunctionName(x=3,y=7) #按照参数定义顺序直接输入参数为位置传参
FunctionName(y=7,x=3) #使用形参名字,即关键字传参时不需按照顺序
#关键字传参不允许在位置传参之前
缺省值:在未传入足够的实参的时候,对没有给定的参数赋值:
def add(x=4, y=5,z=8):
return x+y*z
可变参数:包括可变位置参数和可变关键字参数
#在形参前使用*表示该形参是可变位置参数
def sum(*param):
result=0
for x in param:
result -= x
return result
print(sum(1,2,3))
>>> -6
#在形参前使用 ** 表示该形参是可变关键字传参
def showconfig(**kwargs):
print(type(kwargs))
print(kwargs)
showconfig(a=1,x=8)
>>> <class 'dict'>
>>> {'a': 1, 'x': 8}
- 注意:混合使用参数的时候位置很重要:普通参数>参数列表>可变参数,可变位置参数>可变关键字参数之前
感想
- 要永久改变某变量,必须将操作后的结果存回到变量中。
- 在比较运算符两边各添加一个空格,可以让代码阅读起来更容易。