本文章旨在记录本人python基础语法学习的回顾总结。知识点来自B站莫烦python的python基础教程

python入门笔记

python的安装

下载链接 按需下载噢,建议直接下载3.5以上的版本,不推荐2.X版本

  • macOS下的安装:直接一直点下一步即可
  • windows下的安装:点下一步即可,记得勾选“添加到command line…..”的那个选项噢(否则无法正常使用pip3)
  • linux下的安装:转载一篇博客

安装完成后进入命令行输入python3 显示如下界面:

python3成功安装后iterm界面


print函数

直接上代码吧 比较浅显易懂

say_hi = "Hello World"
print("你的第一行代码:", say_hi)

输出结果:

你的第一行代码: Hello World

有关数学符号

在数学里,“=”就是等于的意思 但是在编程环境中“=”就是赋值的意思,比如sa y_hi = "Hello World"就是把“Hello World”这个值赋值给名为say_hi的变量。在编程环境中的“==”符号,才是用来判断是否相等的,比如123==321就会返回一个False值 QWQ!

还要记得在python里//相当于整除,%相当于取余数噢


自变量variable

python不用定义类型,可以直接定义变量

apple = 1
print(apple)
APPLE_EGG = 11
appleEgg = 12 + 3
print(appleEgg)

如同第二节里的say_hi 一样,apple和say_hi都是变量的名称,定义变量的方式就是如此

运行结果


关于循环与判断

  • while循环
#while循环
num1 = 3
while(num1 <= 8):
    print("现在num的值为:",num1,"num自增1!")
    num1 = num1 + 1

运行结果:

现在num的值为: 3 num自增1!
现在num的值为: 4 num自增1!
现在num的值为: 5 num自增1!
现在num的值为: 6 num自增1!
现在num的值为: 7 num自增1!
现在num的值为: 8 num自增1!
  • for循环
#迭代遍历
a_list = [1,2,3,4,5]
for i in a_list:
  print(i)
#使用下标遍历
for j in range(len(a_list)):
  print(a_list[j])
# 关于range:range(1,3) --> 1 2 (左闭右开) len(a_list)就是返回a_list这个list的长度

运行结果:

for循环代码运行结果

  • enumerate()函数

Python 的 enumerate() 函数就像是一个神秘的黑箱,你无法简单地用一句话来概括这个函数的作用与用法。

enumerate() 函数属于非常有用的高级用法,而对于这一点,很多初学者甚至中级学者都没有意识到。这个函数的基本应用就是用来遍历一个集合对象,它在遍历的同时还可以得到当前元素的索引位置。

names = ["Alice","Bob","Carl"]
for index,value in enumerate(names):
    print(f'{index}: {value}')
'''
0: Alice
1: Bob
2: Carl
'''

有很多从C或Java背景转过来的新的Python开发人员有时使用下面这种range(len(…))方法来保存运行中每个元素的索引,同时再用for循环遍历列表:

# 警告: 不建议这么写
for i in range(len(my_items)):
    print(i, my_items[i])

通过巧妙地使用enumerate()函数,就像我在上面的“names”例子中写的那样,你可以使你的循环结构看起来更Pythonic和地道。

你不再需要在Python代码中专门去生成元素索引,而是将所有这些工作都交给enumerate()函数处理即可。这样,你的代码将更容易被阅读,而且减少写错代码的影响。(译者注:写的代码越多,出错几率越高,尽量将自己的代码看起来简洁,易读,Pythonic,才是我们的追求)

另一个有用的特性是,enumerate()函数允许我们为循环自定义起始索引值。enumerate()函数中接受一个可选参数,该参数允许你为本次循环中的计数器变量设置初始值:

names = ["Alice","Bob","Carl"]
for index,value in enumerate(names,1):
    print(f'{index}: {value}')
'''
1: Alice
2: Bob
3: Carl
'''
##这段代码演示的就是如何将Python的enumerate()函数默认0起始索引值修改为1
  • if,if else,if elif else
inin = int(input("请输入一个数字"))
if inin < 0:
  print("这个数字小于0")
elif inin == 3:
  print("这个数字等于3")
else:#else是相对于if来说的
  print("这个数字大于等于0且不等于3")

运行结果:

if判断代码运行结果


使用def定义函数

def fun(a,b):
# a,b为参数 函数可以有返回值也可以没有噢
    c = a+b
    print(3)
    #可以通过运行结果看到调用的顺序
    return c
print(fun(2,3))

运行结果:

3
5
  • 函数默认参数
def fun1(a,b=30,d=20):
#可以设置函数的参数为默认值,未写明的调用就直接用定义好的调用值
    print(a,b,d)
#请注意未定义好初始值的变量不能在已经定义好初始值的变量后面
fun1(1)
fun1(1,b=2,d=3)

运行结果:

1 30 20
1 2 3

全局变量&局部变量

APPLE = 100
a = None
def fun():
    global a
    #不加global a就会None
    a = 20
    global b
    b = 120
    'print(a)'
    return a+103
print('past a:',a)
print(fun())
print(b)
print("later a:",a)
#通过添加global,使原来是局部变量作用域的变量变为全局变量

运行结果:

past a: None
123
120
later a: 20

模块安装

  • macOS/Linux下的模块安装:使用终端里的iterm即可:

模块安装

  • Windows下的安装:去官网下载

读写文件

  • 创建一个文件并向其写入一些文字
text = "This is my first test.\nThis is next line.\nThis is last line"
#\n代表回车,在文件中就相当于输入一个句子换行
print(text)
my_file = open('my file.txt','w')
my_file.write(text)
my_file.close()
#open函数第一个参数是要打开的文件的文件名,第二个参数是打开方式,w代表写,r代表只读,如果以w方式打开不存在的文件则会直接创建新文件,编辑完文件记得使用close方法保存文件
  • 使用append打开方式(a)向文件末尾添加文字
append_text = "\nThis is appended file."
#a的意思是append
my_file = open("my file.txt",'a')
my_file.write(append_text)
my_file.close()
  • 读取文件并print
file = open("my file.txt",'r')
#content = file.read()
#readline是一行一行读
content = file.readlines()
for i in content:
    print(i)
second_read_time = file.readline()
print(content,second_read_time)
print(content)
file.close()

运行结果:

This is my first test.

This is next line.

This is last line

This is appended file.

This is appended file.
['This is my first test.\n', 'This is next line.\n', 'This is last line\n', 'This is appended file.\n', 'This is appended file.'] 
['This is my first test.\n', 'This is next line.\n', 'This is last line\n', 'This is appended file.\n', 'This is appended file.']

类 class

  • 类的定义:

    一般类名首字母大写 再跟上冒号,比如这样:

class Calculator:
    name = "Casio Calculator"
    price = "199"
    #self是类内函数默认参数 self就是类本身 类似与java中的this
    def add(self,x,y):
        print(self.name)
        result = x + y
        print(result)
    def minus(self,x,y):
        result = x - y
        print(result)
    def times(self,x,y):
        result = x * y
        print(result)
    def divide(self,x,y):
        result = x / y
        print(result)

在类里可以定义属性,也可以定义类中的函数,但注意类中的函数参数列表的第一个参数必须是self,self类似于java对象中的this指针

  • 类的实例化及调用:
#类的实例化
cal = Calculator()
#类中的元素
cal.name
#类中的方法
cal.add(1,2)
  • 类的__init__方法
class Calculator:
    #name = "Casio Calculator"
    #price = "199"
    def __init__(self,name,price,height,width,weight):
        #init这个函数类似java中类的构造函数,但是类中的元素不像java需要提前定义好 类在初始化时会自动执行__init__()函数QWQ!
        print('!!!initinit!!!')
        self.name = name
        self.price = price
        self.h = height
        self.wi = width
        self.we = weight
    #self是类内函数默认参数 self就是类本身 类似与java中的this
    def add(self,x,y):
        print(self.name)
        result = x + y
        print(result)
    def minus(self,x,y):
        result = x - y
        print(result)
    def times(self,x,y):
        result = x * y
        print(result)
    def divide(self,x,y):
        result = x / y
        print(result) 

输入

a_input = input('Please give me a number:') #return a string so it equals '1' not equals 1
if a_input=='1':
    print("this is a good one")
elif a_input=='2':
    print("see you next time")
else:
    print("FKU!")

b_input = int(input('Please give me a b number:')) #return a string so it equals '1' not equals 1
if b_input==1:
    print("this is a good one")
elif b_input==2:
    print("see you next time")
else:
    print("FKU!")

运行结果:

Please give me a number:1
this is a good one
Please give me a b number:3
FKU!

请注意,python3中的input,默认输入的是字符串,记得转格式再使用


元组&列表&字典

  • 元组(tuple)

元组tuple最大的特征是内容不可变,因此使用频率低,一般常用List

  • 列表(List)

列表是我们最常用的一种存储数据机制。它就像一个抽屉一样,存放着各种信息,每一格都是一个存储单元,每一格都可以单独获取。

files = ["f1.txt", "f2.txt", "f3.txt", "f4.txt", "f5.txt"]
print("files[0] ", files[0])
print("files[3] ", files[3])
print("files[-1] ", files[-1])
print("files[-3] ", files[-3])

运行结果

files[0]  f1.txt
files[3]  f4.txt
files[-1]  f5.txt
files[-3]  f3.txt

在列表中,既然你已经把东西按顺序存放到抽屉中了,那你就可以按照顺序拿到你存放的东西。 在Python中,我们将上面的数字号叫做 index 索引。现实中第1个位置的东西,在Python中,是第0位。 所以Python的第一个索引永远都是 0。 除了正着来取东西,我们完全也可以反着来取东西,第一个反着取的序号是 -1。以此类推,-3 这个索引就是倒着数第三个。

而且在Python中,还很方便的可以一次性拿到多个抽屉的结果。比如下面我们就来演示一下取从多少位到多少位的东西。

print("files[:3] ", files[:3])
print("files[2:4] ", files[2:4])
print("files[-3:] ", files[-3:])

运行结果:

files[:3]  ['f1.txt', 'f2.txt', 'f3.txt']
files[2:4]  ['f3.txt', 'f4.txt']
files[-3:]  ['f3.txt', 'f4.txt', 'f5.txt']

在列表中,你可以存放不同类型的元素,字符,数字,甚至列表里还能有列表。

  • 多维List
a=[1,2,3,4,5]
multi_dim_a=[[1,2,3],
             [2,3,4],
             [3,4,5]]
print(a[0])
print(multi_dim_a[0][2])

运行结果:

1
3
  • 字典(dictionary)

key->value 一一对应 这里的key对应的就是list中的index哦!这个字典中的 key 都是唯一的,如果你的抽屉出现了重名,我相信你应该也不知道到底是哪个抽屉放着想要找的东西吧。 而 value 是多样的,你可以放一个字符,一个数字,甚至一个列表,甚至是另一个字典。当你想要索引的时候,用 key 就能找到里面的内容。同列表,字典也是可以修改的。

a_list = [1,2,3,4,5,4]
d = {'apple':1,'pear':2,'orange':3}
d2 = {1:'abandon',2:'bear','c':'ciliba'}
print(d2[1])
print(a_list[0])
#删除字典元素 del
print(d)
del d['orange']
print(d)
#添加元素的话直接定义就行
print(d)
d['b'] = 20
print(d)
#字典里也可以加字典 function
dd = {'apple':1,'pear':{1:3,3:'a'},'orange':3}
print(dd['pear'][3])

运行结果:

abandon
1
{'apple': 1, 'pear': 2, 'orange': 3}
{'apple': 1, 'pear': 2}
{'apple': 1, 'pear': 2}
{'apple': 1, 'pear': 2, 'b': 20}
a

模块

  • 载入模块

可以使用import 模块名 来载入模块,也可以用import time as t使t成为被引入模块time的别名,方便调用。如果只想使用一个模块中的部分功能:from time import time,localtime,其中time,localtime就是time模块中的两个方法名。也可以使用from引入模块中的所有方法,引入后调用方法无需输入方法前的模块名,如from time import *

  • 自定义模块

自己编写的.py文件和当前在编码的文件同路径时,直接使用import引入即可,或者把自己编写的.py文件复制/移动到python系统下载其他模块的默认目录中也可以。


continue&break

  • 在没有continue,break时:
a = True
while a:
    b = input('type sth:')
    if b=='1':
        a = False
    else:
        pass
print("finish running")
  • 有break时
while True:
    b = input('type sth:')
    if b=='1':
        break
    else:
        pass
    print("still in while")
print("finish running")
  • 有continue时 continue跳过循环范围内的的后续代码:else … print… 从而不输出still in while
while True:
    b = input('type sth:')
    if b=='1':d
        continue
    else:
        pass
    print("still in while")
print("finish running")

错误处理try

  • 没有try时
file = open('eee.txt','r')
#如果文件名输入错误,或者文件不存在时会直接报错,影响程序后续执行
  • 使用try
filename = input('input file name:')
try:
    file = open(filename,'r+')
# 捕获错误
except Exception as e:
    print('there is no file QWQ')
    response = input('do you want to create a new file?(y/n)')
    if response == 'y':
        file = open(filename,'w')
    else:
        pass
else:
    #如果try成功了
    file.write('aaa')
file.close()

使用lambda,zip,map

map 分两部分 功能和参数合起来,lambda相当于简化的功能/函数,zip是迭代器所需要的东西,直接上代码:

a = [1,2,3]
b = [4,5,6]
#zip是把a和b竖向合并
zip(a,b)
#zip返回值是一个功能
ll = list(zip(a,b))
print(ll)
##[(1, 4), (2, 5), (3, 6)] 此为print(ll)的结果
for i,j in zip(a,b):
    print(i/2,j*2)
    ## 0.5 8
		## 1.0 10
		## 1.5 12
#能否zip更多元素?
lll = list(zip(a,a,b))
print(lll)
##[(1, 1, 4), (2, 2, 5), (3, 3, 6)]  此为print(lll)的结果
#lambda:
	# 未使用lambda
def fun1(x,y):
    return(x+y)
print(fun1(2,3))
## 5
  # 使用lambda 可提高代码可读性
fun2 = lambda x,y:x+y
print(fun2(2,3))
## 5
#map
#把已知的功能加上所要给的参数一起输入运算 是一个object
print(list(map(fun1,[1],[9])))
## [10]
print(list(map(fun1,a,b)))
## [5, 7, 9]

深复制&浅复制

  • 浅复制与深复制的区别:浅拷贝,拷贝父对象不会拷贝子对象,深拷贝的话完全拷贝父及子对象

    import copy
    a = [1,2,3]
    b = a
    #id是在硬盘中的索引
    print(id(a))
    print(id(b))
    b[0]=11
    print(a)
    a[0]=12
    print(b)
    #改变a的值,b也跟着变
    print(id(a)==id(b))
    #浅复制 只复制值 不复制地址
    c = copy.copy(a)
    print(id(a)==id(c))
    c[1]=22222
    print(a)
    print(c)
    d=[1,2,[3,4]]
    e = copy.copy(d)
    print(id(d)==id(e))
    print(id(d[2])==id(e[2]))
    #True
    d[0] = 11
    print(d)
    print(e)
    d[2][0] = 333
    print(d)
    print(e)
    #所以浅复制的list中的list是无法幸免的 还是会被同步
    e = copy.deepcopy(d)
    print(id(d[2])==id(e[2]))
    #False
    #list表有单独索引,这个不一样。但是表内元素索引一样的,说明都指向那个元素,感觉空间节省了。

pickle存放数据

可以使用pickle保存一些你之后想再次利用的数据,以二进制形式保存噢,后缀名一般为.pickle。

  • 保存数据
import pickle
#可以在你想保存运算结果时做到保存和提取的功能
a_dict = {'da':111,2:[23,1,4],'23':{1:2,'d':'sad'}}
file = open('pickle_example.pickle','wb')
#dump()函数!!file的后缀名记得是.pickle哦
pickle.dump(a_dict,file)
file.close()
  • 从.pickle文件中读取数据
with open('pickle_example.pickle','rb') as file:
#使用with开头的这个句子不用file.close()诶 好神奇qwq!
#file = open('pickle_example.pickle','rb')
    a_dict1 = pickle.load(file)
print(a_dict1)
#file.close()

使用set来找不同

char_list = ['a','b','c','c','d','d','d']
print(set(char_list))
#{'a', 'c', 'b', 'd'}
print(type(set(char_list)))
#<class 'set'>
print(type({1:2}))
#<class 'dict'>
sentence = 'Welcome Back to This Tutorial'
print(set(sentence))
#{'T', 'W', 'h', 'i', 'r', 'o', 'm', 'a', ' ', 'u', 'e', 'c', 'B', 't', 'l', 's', 'k'}
#print(set([sentence,char_list])) 会报错 不能传列表+列表的形式
unique_char = set(char_list)
unique_char.add('x')
print(unique_char)
#{'b', 'a', 'x', 'd', 'c'}
#unique_char.add(['a','x']) 也错了捏
#可以减东西吗?qwq
unique_char.clear()
print(unique_char)
#单独去除东西呢?
unique_char.remove('x')#返回值为None哦 打印出的结果就是None
print(unique_char)
#{'a', 'c', 'd', 'b'}
#如果remove一个不存在的元素,就会报错 所以使用discard()
print(unique_char.discard('y'))
print(unique_char)
#比较两个set set1={'b', 'a', 'x', 'd', 'c'} set2 = {'a','e','i'}
set1 = unique_char
set2 = {'a','e','i'}
print(set2.difference(set1))
#{'e', 'i'} differece是做差 不具备可交换性
print(set1.difference(set2))
#{'x', 'b', 'd', 'c'}
print(set1.intersection(set2))
#{'a'} intersection为取交集
print(set2.intersection(set1))
#{'a'}

RegEx 正则表达

请参考这个链接