我在想要学习Python
时找了很多教程,并没有找到有编程基础学Python
的简洁易懂的教程,于是写下了这篇文章,希望能够帮到他人,也留作我的学习笔记,这里参考了 菜鸟教程 的 Python3 教程 。本文章省略了许多与C/C++
和Java
类似的共同基础知识点,这里默认读者都已经掌握。
基础语法
首先经典:
print ("Hello World!") # 这是注释
然后开始学习吧
Python
最具特色的就是使用缩进来表示代码块,不需要使用大括号{}
,而且行尾不需要加分号,写多行需要加\
if False :
print ("1")
elif 1 :
print ("2", end = " ") # 不换行输出要加上 end
print ("3")
else:
print ("4")
字符串切片str[start:end]
,其中start
(包含)是切片开始的索引,end
(不包含)是切片结束的索引
字符串的切片可以加上步长参数step
,语法格式如下:str[start:end:step]
str='0123456789' # 注意字符串是单引号
print(str[0:-1]) # 输出 012345678(从右往左以 -1 开始)
print(str[2:]) # 输出 23456789
print(str[1:5:3]) # 输出 14(步长为3)
print(str * 2) # 输出字符串两次
print(r'hello\nrunoob') # 在字符串前面添加一个 r,表示原始字符串,不会发生转义,这里的 r 指 raw,即 raw string
数据类型
- 可以这样赋值:
a, b, c = 1, 2, "runoob"
-
冷知识:在 Python 3 里,只有一种整数类型
int
,表示为长整型 -
内置的
type()
函数可以用来查询变量所指的对象类型,还可以用isinstance()
来判断
a, b, c, d = 20, 5.5, True, 4+3j
print(type(a), type(b), type(c), type(d))
# 输出 <class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
isinstance(a, int)
# 输出 True
虽然感觉没什么用。二者还有一点区别type()
不会认为子类是一种父类类型,而isinstance()
相反,这里不作赘述
-
True
和False
可以和数字相加,True==1
、False==0
-
使用
del
删除对象
del var_a, var_b
-
数值的除法包含两个运算符:
/
返回一个浮点数,//
返回一个整数 -
Python
不支持单字符类型,单字符在Python
中也是作为一个字符串使用 -
单双引号不作区分
-
与
C
字符串不同的是,Python
字符串不能被改变
word = 'Python'
print(word[0], word[5]) # 输出自带空格
# 输出 P n
- 用
and
、or
和not
表示与或非
列表、元组、集合与字典
- 分别如下定义
list = ['abcd', 786 , 2.23, 'runoob', 70.2] # 列表
tuple = ('abcd', 786 , 2.23, 'runoob', 70.2) # 元组
sites = {'Google', 'Taobao', 'Runoob', 'Facebook', 'Zhihu', 'Baidu'} # 集合
dict = {'name' : 'runoob','code' : 1, 'site' : 'www.runoob.com'} # 字典
- 元组
tuple
与列表list
类似,不同之处在于元组的元素不能修改。元组写在小括号()
里,元素之间用逗号隔开 - 二者只有一个元素时创建需要带逗号,因为不带逗号会被认为括号是运算符
list = [23,]
tuple = (23,)
print (list)
print (tuple)
输出
[23]
(23,)
- 创建一个空集合必须用
set()
而不是{ }
,因为{ }
是用来创建一个空字典 - 字典还可如下定义
dict = {}
dict['one'] = "1 - 菜鸟教程"
dict[2] = "2 - 菜鸟工具"
print (dict.keys()) # 输出所有键
print (dict.values()) # 输出所有值
推导式
- 列表推导式,定义为:
[表达式 for 变量 in 列表]
[out_exp_res for out_exp in input_list]
或者
[表达式 for 变量 in 列表 if 条件]
[out_exp_res for out_exp in input_list if condition]
例如输出长度大于 3 的字符串的大写形式:
names = ['Bob', 'Tom', 'alice', 'Jerry', 'Wendy', 'Smith']
new_names = [name.upper() for name in names if len(name) > 3]
print(new_names)
- 元组、集合、字典推导式和列表推导式很像,其中元组用
()
定义,集合和字典用{}
定义
迭代器与生成器
- 迭代器对象从集合的第一个元素开始访问,只能往前不会后退。迭代器有两个基本的方法:
iter()
和next()
。
list=[1, 2, 3, 4]
it = iter(list) # 创建迭代器对象
for x in it:
print (x, end=" ")
- 使用了
yield
的函数被称为生成器generator
。生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。当在生成器函数中使用yield
语句时,函数的执行将会暂停,并将yield
后面的表达式作为当前迭代的值返回
def countdown(n):
while n > 0:
yield n
n -= 1
# 创建生成器对象
generator = countdown(5)
# 通过迭代生成器获取值
print(next(generator)) # 输出: 5
print(next(generator)) # 输出: 4
print(next(generator)) # 输出: 3
# 使用 for 循环迭代生成器
for value in generator:
print(value) # 输出: 2 1
函数
- 基本定义:
def 函数名(参数列表):
函数体
- 在
Python
中,类型属于对象,对象有不同类型的区分,变量是没有类型的,例如:a=[1,2,3]
,其中[1,2,3]
是List
类型,而变量a
是没有类型,它仅仅是一个对象的引用(一个指针) - 在
Python
中,strings
、tuples
、和numbers
是不可更改的对象,而list
和dict
等则是可以修改的对象:- 不可变类型:变量赋值
a=5
后再赋值a=10
,这里实际是新生成一个int
值对象10
,再让a
指向它,而5
被丢弃,不是改变a
的值,相当于新生成了a
,在参数传递中类似于C++
的值传递 - 可变类型:变量赋值
la=[1,2,3,4]
后再赋值la[2]=5
则是将list la
的第三个元素值更改,本身la
没有动,只是其内部的一部分值被修改了,在参数传递中类似于C++
的引用传递
- 不可变类型:变量赋值
但是在Python
中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
- 使用关键字参数(形如
a=1
)允许函数调用时参数的顺序与声明时不一致,因为Python
解释器能够用参数名匹配参数值,比如:
def printinfo( name, age ):
print ("name:", name)
print ("age:", age)
return
printinfo( age = 20, name = "Heait" )
- 匿名函数
lambda
定义如下:
lambda arguments: expression
lambda
函数是一种小型、匿名的、内联函数,它可以具有任意数量的参数,但只能有一个表达式,例如:
x = lambda a, b: a + b
print (x(5, 6)) # 输出 11
数据结构
- 列表可以实现栈,但由于它删除队头元素时间复杂度是
O(n)
的,所以一般用双端队列collections.deque
实现队列,具体操作自行搜索资料,这里不再赘述 - 使用
del
语句可以从一个列表中根据索引来删除元素,例如del a[2:4]
- 在字典中遍历时,关键字和对应的值可以使用
items()
方法同时解读出来:
dic = {'Geralt': 'the brave', 'Ciri': 'the pure'}
for k, v in dic.items():
print(k, v)
输入和输出
input()
函数接受一个标准输入数据,返回为string
类型
a, b = map(int, input().split())
print (a + b)
- 格式化输出:
print ('这篇文章作者是:{}'.format('Heait'))
print ('创作年份是:%d' % 2024)