这两天看完了Python3的语法部分,想转往人工智能方面发展发展,只有这个的话还不足以进行开发,还得学习更多其他知识,不知道各位有没有转入人工智能的相关经验可以分享一下?
好,先专注于做好目前的正事儿,整理一下Python3的语法部分!
1.注释
单行注释: #注释内容
多行注释: '''注释内容''' 或者 """注释内容"""
2.缩进
Python中不是使用{}来区分一个块的,而是通过一个tab键的缩进来区分块的,同一缩进级别的会被认为是一个块,例如:
当一个缩进都没有时,缩进等级 = 0,每多一个tab缩进,缩进等级+1,比如下面代码当中的if这一行,缩进等级=0,他的下一行多了一个tab的缩进,缩进等级=1,缩进等级大的,归属于缩进等级小的的块.
3.多行语句
除了{},[],()或者多行注释内部的语句外,要想把一条语句进行换行,需要使用反斜杠(\)来链接
4.字符串
- 单引号和双引号使用完全相同。
- 使用三引号('''或""")可以指定一个多行字符串。
- 转义符 '\'
- 反斜杠可以用来转义,使用r可以让反斜杠不发生转义。。 如 r"this is a line with \n" 则\n会显示,并不是换行。
- 按字面意义级联字符串,如"this " "is " "string"会被自动转换为this is string。
- 字符串可以用 + 运算符连接在一起,用 * 运算符重复。
- 字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。
- 不能改变。
- 字符串的截取的语法格式如下:变量[头下标:尾下标]
s = 'sfsadf' #等价于s1s1 = "sfsadf"
s2 = """sfsadf""" #多行字符串
s3 = r"不转义\n" # \不进行转义
s3[-1] #最后一位 n
s3[0] #第一位 不
字符串对象提供了许多有用的方法,可以通过 help(str)查看,更多参考下面地址:
点击这里
切片
切片其实就是取其中某一部分,切片的对象可以是任何序列 列表 元组 字符串等,切片其实就是下标([])操作,它的格式大概如下
变量名[下标1 : 下标2 : 步长]
其有几个变种,下标2和步长都是可选的
list[:-1] #从第一位开始,可以省略不写,等价于list[0:-1],取到倒数第二位list[2:] #从第三位开始取到最后list[:] #直接复制一份list[::-1] #翻转
5.导入模块
在 python 用 import 或者 from...import 来导入相应的模块。
将整个模块(somemodule)导入,格式为: import somemodule
从某个模块中导入某个函数,格式为: from somemodule import somefunction
从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc
将某个模块中的全部函数导入,格式为: from somemodule import *
关于模块的更多说明可以点击这里
6.变量
在Python中,变量不用定义,但是在使用之前必须赋值,只有赋值之后,一个变量才会被创建,Python中的变量存储的都是指向某个内存中的对象,没有类型,所以在使用时需要注意.变量可以以如下格式进行:
创建
vir = 100 #变量赋值并创建
多个变量一起创建
#可以如下这样,相当于a=1 b=2 c=3a,b,c = 1,2,3#也可以如下这样,相当于x=10 y=10 z=10x = y = z = 10
删除
不像其他语言,Python中提供了专门的关键字del用于删除对象,如果被删除的是变量,再次引用变量将会报错,同时del还可以用于删除列表 元组 字典等当中的元素
#删除单个del var1#删除多个del var1,var2,var3
7.列表,元组,集合,字典
列表
列表是用一对[]包裹起来的,用逗号,分开的一组数据,是可以被索引的数据,创建一个列表:
list = ["asf",111,100.2] #创建一个包含3个元素的列表list1 = [] #创建一个空列表
除了与字符串相似的操作以外,列表还为我们提供了许多方法,用于我们更方便的使用,可以通过 help(list)进行查看
更多操作点击这里
元组(Tuple)
元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号(())里,元素之间用逗号隔开。下面是创建一个元组的代码:
tup = ("sfs",1231,123.123) #有3个元素的元组tup1 = ("sddf",)#一个元素的需要在后面加逗号tup2 = () #空元组
他的使用与字符串极其相似,操作什么的都是一致的,更多操作点击这里
集合(Set)
集合(set)是一个无序不重复元素的序列。基本功能是进行成员关系测试和删除重复元素。创建集合有下面几种情况:
创建
set1 = {"sdf",123,123.123}set2 = set("asf",123,123.123)set3 = set() #空集合不能用{}创建,{}是创建空字典的
对于它的更多操作我所看到的资料里面并没有,只能通过查看Api的方式查看更多了
字典
字典是一种映射类型,字典用"{ }"标识,它是一个无序的键(key) : 值(value)对集合。创建一个字典如下:
dict0 = {} #创建空的dict1 = {"key1":"value1","key2":"value2"}dict2 = dict(key1='value1',key2='value2')#增加 修改dict1["key3"] = "value3" #有就修改,没有就增加#删除del dict1["key1"]#查询has = "keyn" in dict1
对于字典的键有两点需要记住,
- 键是唯一的,如果多次设置同一个键的值,只会记住最后一个
- 键必须的不可变的
字典的更多操作点击这里
8.条件控制和循环
if语句
格式如下:
if condition_1: statement_block_1elif condition_2: statement_block_2else: statement_block_3
while循环
格式如下:
while 判断条件: 执行语句
在还可以跟上else子句来在循环执行完成后执行
for语句
格式如下:
for in : else:
break,continue和pass
break用于退出当前循环或语句块,
continue用于跳过当次循环
pass用于占位,保持程序的完整性,其什么都不做
9.函数
定义格式:
def 函数名(参数列表): 函数体#实例def func(a,b): print(a+b)
从定义和使用上会有许多种变体,看看下面的代码
#定义不带参数 不带返回值的函数,默认会返回nonedef fun1(): print("hello")#使用fun1()#定义带参数 不带返回值的函数def fun2(a,b) print(a+b)#使用fun2(3,5)#定义不带参数 带返回值的函数def fun3() return "hello"#使用s = fun3();#定义带参数 带返回值的函数def fun4(r) return 3.14 * r**2#使用print(fun4(6))#有默认值参数的函数def fun5(a = 1 ,b,c) return (b + c) **a#在使用的时候我们可以不传默认参数fun5(5,6)#也可以以关键字的形式传递参数fun5(c=111,b=100)#带可变参数的函数,注意,可变参数必须放在最后def fun6(*agrs) for i in agrs: print(i)#调用fun6(1,2,3,4)
lambda实现匿名函数
#格式lambda [arg1 [,arg2,.....argn]]:expression#实例sum = lambda arg1, arg2: arg1 + arg2;
变量的作用域
关于变量的作用域有几个点需要注意一下,
1.只要是在函数中创建的变量,在函数中都能访问,比如:
def fun(): for i in range(0,10): if(i == 0): sum = 0 sum += i #在if外面是可以访问的 return sum #在for外面也是可以访问的
2.修改全局变量需要使用关键字global
num = 1def fun1(): global num # 需要使用 global 关键字声明 print(num) num = 123 print(num)
3.修改嵌套作用域的变量需要使用关键字nonlocal
def outer(): num = 10 def inner(): nonlocal num # nonlocal关键字声明 num = 100 print(num) inner() print(num)
10.面向对象
类(class)
一个类就表示一种类型,和String Int Float这些类型一样,都是一种类型,而String Int Float这些类型是系统定义好的,那么我们其实也可以自己定义类型的,定义一个类的格式如下:
class ClassName: . . .
实例:
class Person: pass
类对象
p = Person()
代码
"""定义一个基类Person,它创建了一个类变量 clazzName ,引用方式是: 类名.类变量名 如:Person.clazzName它实现了构造方法init在init中创建了两个对象变量 name age,,在类内部一般self表示当前的对象,引用方式是: 对象名.对象变量名 如 self.name定义了一个speak方法,用于打印自己的信息"""class Person: clazzName = "Person" #类变量 #构造方法 def __init__(self,name,age): self.name = name #创建一个对象变量name, self.age = age #类变量需要以 类名.成员名 的形式来访问 # print("类名是:" + Person.clazzName) def speak(self): #对象变量需要以 self.变量名 的形式来访问 print("我是一个{},名字是{},{}岁".format(Person.clazzName,self.name,self.age))#用于多继承的基类,只为演示多继承而存在class Action: passclass Student(Person,Action): """ 演示多继承的子类Student,它继承自Person和Action,并有自己的构造方法 """ """以 __xxx__ 格式命名的方法或者变量表示类的专有方法或变量""" def __init__(self,name,age,weight): #这里需要显示的调用父类的构造方法,Action由于没有构造可以不调用 Person.__init__(self,name,age) #创建一个私有对象变量,只能在类内部使用 self.__weight = weight #改变父类Person的类变量的值 Person.clazzName = "Student" """重写父类方法""" def speak(self): super(Student,self).speak() #调用父类被覆盖的方法 print(self.__toString()) """私有方法需要在方法名前面加两条下划线,只能在类内部使用,在外边调用会异常""" def __toString(self): return "我是一个{},名字是{},{}岁 体重{}".format(Person.clazzName,self.name,self.age,self.__weight)#由于init方法增加了两个必要参数,在创建对象的时候需要传入进去p = Student("李四",30,80)p.speak()
通过代码我们可以看到下面几条规则
- 类的定义格式是: class 类名:
- 类的继承格式是: class 类名(基类名1,基类名2,...):
- 类的类变量直接写在类中,以 类名.变量名 方式访问
- 类的对象变量通常写在构造中, 在类内部访问: self.变量名 在类外部: 对象名.变量名
- 类的方法与普通方法区别在于第一个参数必须是self,在调用时可以不传,因为 对象名.方法名() 这种格式就会转化成 方法名(对象名)
- 私有方法和私有变量 只需要在名称前面加两条下划线就可以了 如: __weight __toString() ,并且只能在内内部使用
- __xxx__ 格式命名的方法都是类的专有方法,如 __init__() ,他们都有其特殊的含义
- 如果父类有带参的构造方法时,子类在实现构造方法时,必须显示的调用父类的构造方法,格式是: super(类名,对象名).方法名()
- 关于方法的默认参数和可变参数等属性都与前面的函数一直