
作者:乐雨泉(yuquanle),湖南大学在读硕士,研究方向机器学习与自然语言处理。欢迎志同道合的朋友和我在公众号"AI 小白入门"一起交流学习。
Python 是由 Guido Van Rossum 在 90 年代早期设计,现在是最常用的编程语言之一。特别是人工智能的火热,再加之它的语法简洁且优美,实乃初学者入门AI必备的编程语言。
1. Python 基本语法
1.1 标识符
第一个字符必须是英文字母或下划线 _ 。标识符的其他的部分由字母、数字和下划线组成。标识符对大小写敏感。
1.2 保留字
保留字即关键字,不能用作任何标识符名称。 keyword 模块可以输出当前版本的所有关键字:
import keyword
print(keyword.kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is'
, 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
1.3 注释
单行注释采用#,注释是给人看的,可以是任意内容,解释器会忽略掉注释。
多行注释采用'''或"""。
print("正常执行代码")
'''
这是多行注释,用三个单引号
这是多行注释,用三个单引号
'''
print("Hello, World!")
"""
这是多行注释,用三个双引号
这是多行注释,用三个双引号
"""
print("Hello, World!")
1.4 行与缩进
Python 使用缩进来表示代码块而不是大括号 {}。 缩进的空格数是可变的,但是同一个代码块的语句必须是相同的缩进空格数。建议四个空格数。
注意 Tab 和四格空格混用会报错,这个错误还不容易被察觉。
1.5 输入输出
通常是一条语句一行,如果语句很长,我们可以使用反斜杠()来实现多行语句。在 [], {}, 或 () 中的多行语句,则不需要反斜杠。
sentence1 = "I love " +
"python"
sentence2 = ["I", "love",
"python"]
2. 基本数据类型
计算机程序要处理不同的数据,需要定义不同的数据类型。Python 中的变量不需要声明,每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
Python中变量就是变量,没有类型,所说的"类型"是变量所指的内存中对象的类型。等号(=)用来给变量赋值。等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。
2.1 数字类型(Number)
数字类型是不可变数据。Python3 支持 int(整数)、float(浮点数)、bool(布尔)、complex(复数),数值类型的赋值和计算是很直观的。
a = 3
b = 3.5
c = True
d = 4+3j
print(a, b, c, d)
print(type(a), type(b), type(c), type(d))
print(isinstance(a, int))
print(isinstance(a, float))
关于数值运算,可以同时为多个变量赋值,如a, b = 1, 2。一个变量可以通过赋值指向不同类型的对象。
除法包含两个运算符:/ 返回一个浮点数,// 返回一个整数。混合计算时,Python会把整型转换成为浮点数。
print("Add operation: 5 + 4 = ",5 + 4)
print("Sub operation: 5 - 4 = ",5 - 4)
print("Mul operation: 5 * 4 = ",5 * 4)
print("Div operation: 5 / 4 = ",5 / 4)
print("Div operation: 5 // 4 = ",5 // 4)
print("Mod operation: 5 % 4 = ",5 % 4)
print("Pow operation: 5 ** 4 = ",5 ** 4)
2.2 字符串类型(String)
Python 没有单独的字符类型,一个字符就是长度为1的字符串。字符串用单引号 ' 或双引号 " 括起来。
s1 = "I love python"
s2 = 'I love python'
print(s1)
print(s2)
print("s1首字母字符:", s1[0])
print("s1末尾字母字符:", s1[-1])
print("输出从第三个开始到第五个的字符:", s1[2:5])
str = "I love python "
print("连接字符串:", str + "!!!")
print("输出字符串两次:", str * 2)
print('I
love
python')
print("反斜杠转义失效:",r'I
love
python')
2.3 列表类型(List)
列表类型是一种有序的集合。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。列表是写在方括号 [] 之间、用逗号分隔开的元素列表。
list_a = [1, 2, 3, 4, 5, 6]
list_b = [7, 8, 9]
print(list_a)
print(list_b)
print ("输出完整列表: ", list_a)
print ("输出列表第一个元素:", list_a[0])
print ("从第二个开始输出到第三个元素:", list_a[1:3])
print ("输出从第三个元素开始的所有元素:", list_a[2:])
print ("连接两次列表:", list_a * 2)
print ("连接列表:", list_a + list_b)
list_a = [1, 2, 3, 4, 5, 6]
print("变化前:", list_a)
list_a[0
] = 0
list_a[2:5] = [7, 8, 9]
print("变化后:", list_a)
list_a = [1, 2, 3, 4, 5, 6]
print("添加前:", list_a)
list_a.append(7)
list_a.append(8)
print("添加后:", list_a)
list_a = [1, 2, 3, 4, 5, 6]
print("删除前:", list_a)
del list_a[0]
print("删除后:", list_a)
list_a = [1, 2, 3, 4, 5, 6]
print("列表长度:", len(list_a))
list_a = [1, 2, 3, 4, 5, 6]
print("列表最小值:", min(list_a))
print("列表最大值:", max(list_a))
str = '123456'
print("转换后:", list(str))
list_a = [1, 1, 2, 3, 4, 5, 6]
print("1在list_a中出现的次数:", list_a.count(1))
list_a = [1, 2, 3, 4, 5, 6]
print("3第一次出现的位置:", list_a.index(3))
list_a = [1, 2, 3, 4, 5, 6]
print("插入前:", list_a)
list_a.insert(0 ,7)
print("插入后:", list_a)
list_a = [1, 2, 3, 4, 5, 6]
print("默认移除最后一个元素:", list_a.pop())
print("指定移除第一个元素:"
, list_a.pop(0))
list_a = [1, 2, 3, 4, 5, 6]
print("翻转前:", list_a)
list_a.reverse()
print("翻转后:", list_a)
list_a = [1, 3, 2, 5, 4, 6]
print("排序前:", list_a)
list_a.sort()
print("升序排序:", list_a)
list_a.sort(reverse = True)
print("降序排序:", list_a)
2.4 元组类型(Tuple)
元组类型是不可变类型,元组使用小括号()。
tup1 = (1, 2, 3, 4, 5 )
tup2 = (50,)
tup3 = (50)
print(type(tup2))
print(type(tup3))
tup1 = (1, 2, 3, 4
, 5 )
print ("tup1[0]: ", tup1[0])
print ("tup1[1:3]: ", tup1[1:3])
tup1 = (1, 2)
tup2 = ('a', 'b')
tup3 = tup1 + tup2
print(tup3)
tup1 = (1, 2, 3, 4, 5 )
print(tup1)
del tup1
print("删除后的元组 tup1: ")
print(tup1)
tup1 = (1, 2)
tup2 = ('a', 'b')
print("连接:", tup1 + tup2)
print("复制3次:", tup1 * 3)
tup1 = (1, 2)
print("元组长度:", len(tup1))
tup1 = (1, 2)
print("元组最大值:", min(tup1))
print("元组最大值:", max(tup1))
list1= ['1', '2']
print("转换前:", list1)
tup1 = tuple(list1)
print("转换后:", tup1)
2.5 集合类型(Set)
集合类型是无序的不重复元素序列。使用大括号 {} 或者 set() 函数创建集合。
注意:创建一个空集合必须用 set() 而不是 {},因为 {} 是用来创建一个空字典。
a={'a','b','c'}
b=set('abc')
c=set()
d={}
print(a)
print(b)
print(type(a), type(b), type(c), type(d))
a = set('python')
print(a)
a = set('good')
print(a)
a = set('good')
a.add('p')
print(a)
a = set('good')
a.update('p')
print("添加一个元素", a)
a.update(['a', 'b', 'c'])
print("添加多个元素", a)
a.update(['H', 'e'], {'l', 'l', 'o'})
print('添加列表和集合', a)
s = {'P', 'y', 't', 'h', 'o', 'n'}
s.remove('t')
print("去掉t", s)
s = {'P', 'y', 't', 'h', 'o', 'n'}
print("随机删除元素:", s.pop())
s = {'P', 'y', 't', 'h', 'o', 'n'}
s.clear()
print("清空集合:", s, len(s))
A = set('abcd')
B = set('cdef')
C = set('ab')
print("C是否A子集:", C.issubset(A))
print("A和B并集:", A|B)
print("A和B并集:",A.union(B))
print("A和B交集:", A&B)
print("A和B交集:",A.intersection(B))
print("A和B差集:", A-B)
print("A和B差集:",A.difference(B))
2.6 字典类型(Dictionary)
字典类型是可变类型。在同一个字典中,键(key)必须是唯一的。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中。
dict1 = {"a":"1", "b":"2"}
print(dict1)
dict2 = dict(a="1", b="2")
print(dict2)
dict1 = {"a":"1", "b":"2"}
print ("dict1['a']: ", dict1['a'])
print ("dict1.get('a'): ", dict1.get('a'))
print("获取所有的key值:", dict1.keys())
print("获取所有的value值:", dict1.values())
dict1 = {"a":"1", "b":"2"}
print ("增加前:", dict1)
dict1['c'] = 3
print ("增加后:", dict1)
dict1 = {"a":"1", "b":"2"}
print ("删除前:", dict1)
del dict1['a']
print (
"删除后:", dict1)
dict1 = {"a":"1", "b":"2"}
print ("清空前:", dict1)
dict1.clear()
print ("清空后:", dict1)
print(dir(dict))
3. 条件判断和循环
条件控制:通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。
每个条件后面要使用冒号: ,表示接下来是满足条件后要执行的语句块。使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。在 Python 中没有 switch–case 语句。
x = 5
if x > 3:
print("yes")
x = 99
if x<60:
print("不及格")
elif x<80:
print("良好")
else:
print("优秀")
sum = 0
counter = 1
while counter <= 10:
sum = sum + counter
counter += 1
print("1 到 10 之和为: %d" % sum)
count = 0
while count < 5:
print (count, " 小于 5")
count = count + 1
else:
print (count, " 大于或等于 5")
str = 'python'
list1 = ['I', 'love', 'python']
print("遍历字符串")
for i in str:
print(i)
print("遍历列表")
for i in list1:
print(i)
for i in range(5):
print(i)
for i in range(2,6):
print(i)
for i in range(0, 10, 3):
print(i)
for i in range(-10, -100, -30):
print(i)
list1 = ['I', 'love', 'Python']
for i in range(len(list1)):
print(list1[i])
list1 = ['I', 'love', 'Python']
for i in list1:
if i == 'love':
break
print('当前为 :', i)
var = 10
while var > 0:
var = var -1
if var == 5:
continue
print ('当前值 :', var)
print ("hello world!")
while True:
pass
4. 函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。
Python提供了许多内建函数,比如“print()”,也可以自己创建函数,这被叫做用户自定义函数。
def my_func():
print("test...")
return
1
my_func()
def my_func1(x, y):
print(x)
print(y)
my_func1(1, 2)
def my_func1(y = 1, x = 2)
# 默认参数:在函数声明时,指定形参的默认值,调用时可不传入参数(使用默认值)。
def my_func2(x, y=1):
print(x+y)
my_func2(2)
def my_func3(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
my_func3()
my_func3(1,2)
def
my_func4(x, **kw):
print ('x:', x, 'other:', kw)
my_func4(8)
my_func4(8, z="66")
5. 类
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。
class Student(object):
"学生成绩"
def __init__(self, name, score):
self.name = name
self.score = score
def print_score(self):
print('%s: %s' % (self.name, self.score))
jack = Student('Bart Simpson', 59)
bob = Student('Lisa Simpson', 87)
jack.print_score()
bob.print_score()
jack.age = 7
print("添加一个 'age' 属性:",hasattr(jack, 'age'))
jack.age = 8
print("修改 'age' 属性:",getattr(jack, 'age'))
del jack.age
print("删除 'age' 属性:",hasattr(jack, 'age'))
5.1 类的继承
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。
通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。
class Fruit(object):
'父类Animal'
def run_father(self):
print('调用父类方法...')
class Apple(Fruit):
'子类1 Apple'
def run_son(self):
print('调用子类方法...')
class Orange(Fruit):
'子类2 Orange'
def run_son(self):
print('调用子类方法...')
apple = Apple()
orange = Orange()
apple.run_father()
orange.run_father()
apple.run_son()
orange.run_son()
方法重写
如果父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法
class Fruit(object):
'父类Animal'
def run(self):
print('调用父类方法...')
class Apple(Fruit):
'子类1 Apple'
def run(self):
print('子类1 Apple 重写父类方法...')
class Orange(Fruit):
'子类2 Orange'
def run(self):
print('子类2 Orange 重写父类方法...')
apple = Apple()
orange = Orange()
apple.run()
orange.run()
6. 模块
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和 Python 语句。模块让你能够有逻辑地组织你的 Python 代码段。
把相关的代码分配到一个模块里能让你的代码更好用,更易懂。模块能定义函数,类和变量,模块里也能包含可执行的代码。
import math
print("求e的n次幂:",math.exp(1))
from math import exp
print("求e的n次幂:",exp(1))
from math import *

作者简介
乐雨泉 (yuquanle),湖南大学在读硕士,研究方向机器学习与自然语言处理。曾在IJCAI、TASLP等会议/期刊发表文章多篇。欢迎志同道合的朋友和我在公众号"AI小白入门"一起交流学习,探讨成长。
