语法规范
python的语法总结一下就两条:
1、一条代码作为一行。比如:一个赋值、一个运算、一个请求、一条打印等
2、对齐和缩进:同一级别的代码只需要保持对齐即可,对于不同级别的代码进行缩进。这样就可以区分开代码的执行逻辑例1:
num1 = 1,num2 = 2,num3 = 3
total = num1 + \
num2 + \
num3
print("total is : %d"%total)
"""
如果一行含有多个语句将会抛出异常 ,Python代码中一行只能有一个语句,以新行作为为语句的结束符。
例2:
if True:
print("Hello girl!")
else:
print("Hello boy!")
print("end")
print("=========华丽的分割线===========")
if True:
print("Hello girl!")
else:
print("Hello boy!")
print("end")
"""
上面代码输出结果:
Hello girl!
end
=========华丽的分割线===========
Hello girl!
"""
备注:
1、缩进相同的一组语句构成一个代码块,我们称之代码组
2、像if、else、elif、for、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组
3、缩进统一:空格、tab等,尽量使用一种。(官方建议四个空格)流程控制语句体要缩进,不缩进则被解析为非流程控制的语句体。
Python多行语句
Python语句中一般以新行作为为语句的结束符。但是我们可以使用斜杠( \ )将一行的语句分为多行显示。若语句中包含[], {} 或 () 括号就不需要使用多行连接符
例3:
num1 = 1
num2 = 2
num3 = 3
total = num1 + \
num2 + \
num3
print("total is : %d"%total)
#上面代码的输出结果为:total is : 6
变量
变量标识符规范
• 标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(" _ ")
• 标识符名称的其他部分可以由字母(大写或小写)、下划线(" _ ")或数字(0-9)组成。
• 标识符名称是对大小写敏感的。例如,myname和myName不是一个标识符。注意前者中的小写n和后者中的大写N。
• 标识符名称不能是关键字,如import、class、break、if、while等等,用了不报错,但当使用关键字的时候就报错了,被你的变量冲掉了原来的关键字
备注:
1、变量的赋值是存放在内存空间中,再从内存空间获取
2、变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符串等
例3_1:
>>> name = "Zha"
>>> name
'Zha'
>>>
3、变量赋值的时候,若变量名在内存中没有的话就等于赋一个新的变量,若变量名已在内存中,则是重新改写这个变量(变量不仅可以赋值各种类型,还可以随意改变类型)
例4:
>>> name = "Zha"
>>> name
'Zha'
>>> name = 1
>>> name
1
>>>
4、变量的赋值是指向内存地址,变量1赋值变量2,变量1重新赋值后不改变变量2的值,因为变量1重新赋值后内存地址改变,而没有重新赋值的变量2内存地址不变。
例5:
>>> name = "Zhong Yi"
>>> name
'Zhong Yi'
>>> name2 = name
>>> name2
'Zhong Yi'
>>> name = "Jigongtou"
>>> name
'Jigongtou'
>>> name2
'Zhong Yi'
5、查看变量的内存地址,id()
例子6:
>>> id(name)
140514571357472
>>> id(name2)
140514571357520
>>> id(name),id(name2)
(140514571357472, 140514571357520)
>>>
6、多个变量赋值:Python允许你同时为多个变量赋值
例7:
#a = b = c = 1
#以上实例,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上。
>>> a=b=c=1
>>> a,b,c
(1, 1, 1)
>>>
7、您也可以为多个对象指定多个变量(序列解包)
例8:
#a, b, c = 1, 2, "john"
#以上实例,两个整型对象1和2的分配给变量a和b,字符串对象"john"分配给变量c。
>>> a,b,c=1,2,"john"
>>> a,b,c
(1, 2, 'john')
>>>
8、变量分为全局变量和局部变量。全局变量就是对于整个文件产生作用,在程序任意位置都可以调用,也就是说该变量程序结束时才会被回收,而局部变量只能对某一部分代码产生作用,一旦这部分代码结束,这个变量就会被回收
例9:
a = 1
def num():
print(a)
#变量a为全局变量,在函数内、函数外都可以调用
if __name__ =="__main__":
num()
print(a)
#上面代码的数据结果:1、1
例9_1:
def num():
a = 1
print(a)
if __name__ =="__main__":
num()
print(a)
"""
1、上面代码输出结果:NameError: name 'a' is not defined
2、只能在函数体内访问局部变量,不能函数体外访问局部变量
3、即a在调用函数num()后,就被回收了,所以后面在打印时就不存在a变量了
"""
9、函数体外访问局部变量:global关键字
例10:
def num():
global a
#使用global关键字使局部变量变为全局变量,可以在任意位置(函数体外)访问该变量
a = 1
print(a)
if __name__ =="__main__":
num()
print(a)
#上面代码的数据结果:1、1
10、重新定义全局变量:在函数体内重新定义全局变量例11:
a = 1
def num():
a = 2
print(a)
if __name__ =="__main__":
num()
print(a)
#上面代码的数据结果:2、1
注:有上面例子可以看出:在函数体内重新定义全局变量后,不会改变原变量的值例11_1:
a = 1
def num():
global a
#变量a本来就是全局变量,在局部定义域内重新后且用了关键字global后,就会改变全部变量中的值
a = 2
print(a)
if __name__ =="__main__":
num()
print(a)
#上面代码的数据结果为:2、2
运算
算术运算
1、常见的算术运算就是加减乘除
2、当有复杂运算时需遵守两个原则:
①括号内的运算优先运算
②先乘除后加减,从左到右依次运算
例12:
a,b,c = 1,2,3
print((a+b)/c)
#上面代码的数据结果为:1.0
关系运算
== | 如果两个操作数的值相等,则条件为真 |
!= | 如果两个操作数的值不相等,则条件为真。 |
> | 如果左操作数的值大于右操作数的值,则条件成为真。 |
< | 如果左操作数的值小于右操作数的值,则条件成为真。 |
>= | 如果左操作数的值大于或等于右操作数的值,则条件成为真。 |
<= | 如果左操作数的值小于或等于右操作数的值,则条件成为真。 |
注:
1、上面6种比较的结果只有2种,True或False,比较的结果与事实一致就是True,反之就为False
2、关系运算的优先级低于算术运算,当两者同时存在时优先进行算术运算,在进行关系运算
例13:
a,b,c = 1,2,3
print((a+b)/c == 1)
print(a+b<c)
#上面代码的数据结果为:True、False
赋值运算
= | 将右侧操作数的值分配给左侧操作数 | c = a + b表示将a + b的值分配给c |
+= | 将右操作数相加到左操作数,并将结果分配给左操作数 | c + = a等价于c = c + a |
-= | 从左操作数中减去右操作数,并将结果分配给左操作数 | c -= a 等价于 c = c - a |
*= | 将右操作数与左操作数相乘,并将结果分配给左操作数 | c *= a 等价于 c = c * a |
/= | 将左操作数除以右操作数,并将结果分配给左操作数 | c /= a 等价于 c = c / a |
例14:
a,b,c = 1,2,3
a *=2
b +=2
c -=2
print(a,b,c)
#上面代码的数据结果为:2 4 1
逻辑运算符
and | 如果两个操作数都为真,则条件成立。 |
or | 如果两个操作数中的任何一个非零,则条件成为真 |
not | 用于反转操作数的逻辑状态。 |
例15:
a = True
b = False
x = 3
y = 4
z = 0
print ('(a and b) = ', (a and b))
print ('(a or b) = ', (a or b))
print ('not(a and b) = ', not(a and b))
print(x and y)#两边同为true时,才返回true
print(x or y)#任意一边为true时,才返回true,同为false时返回false
print(not x) #a=3是true,所以返回False
print(x and z)#z=0是False
print(x or z)
print(not z)
print(a > b and a == b)
"""
(a and b) = False
(a or b) = True
not(a and b) = True
4
3
False
0
3
True
False
"""
注:
1、值不为0或不为空时,程序均判断为True
2、在python中 None, False, 空字符串" ", 0, 空列表[], 空字典{}, 空元组()都相当于False例15_1:
#if与not连用时,只有当条件为真时参才会执行冒号后面的语句
a = True
b = False
if not a: #这里因为a是True,所以not a就是False,不会执行冒号下面的语句
print("a = hello")
if not b: #这里因为b是False,所以not b就是True,不会执行冒号下面的语句
print("b = hello")
#上面代码的数据结果为:b = hello
函数
语法如下:
def 函数名():
...
...
注:
函数名可以由数字、字母或者下划线组合而成,但不能以数字开头,冒号以下的代码是函数的主体,换行的缩进表示代码属于该函数
函数的参数
自定义函数的时候还可以加上参数,参数可以是一个,也可以是多个,参数放在()里面。此时加上的参数只是一个形式参数,而非真的实际参数(形参和实参的变量名可以是一样的,但是代表的意义不一样)。简单的来讲可以将形参理解成通过一本书占座,实际人过来的时候对应这本书的名字来坐上这个座位例16:
def num(a,b): #定义一个函数,并创建形参a,b
c = a + b
print(c)
num(1,2) #调用函数,并给形参a,b分别赋值1,2
num(3,4)
#上面代码的数据结果为:3、7
注:
1、对于函数num()来说,函数内的a,b只是一个空壳,a,b可以代表任意数据
2、在加形参的时候也可以给形参赋值,产生一个默认值,当调用函数不加实参时,就以定义函数时参数的值作为实际值;当调用函数加上实参时,则用新的实参代替原来的参数值
函数的返回值
在上面的例子中定义函数只是用来执行某些操作,并没有将最后执行的结果保存。上面例子中只是将c的值打印出来,并未将c的值保存和返回,导致c的值只能在函数内使用。因此需要使用return返回c的值,将函数的返回值赋值给一个变量,由此可以在其他函数中调用(还可以将c定义成全局变量,则在函数外也可以使用,不过这样写不美观)
例17:
def num(a,b):
global c
c = a + b
return c
def num_1(b =1):
d = c +1
print(d)
num_1(num(1,2))
例17_1:
def num(a,b):
c = a + b
return c
def num_1(c,b =1):
d = c +1
print(d)
c = num(1,3)
num_1(c)
#上面代码的输出结果为:4
注:
有时候需要的返回值不止一个,同样可以使用return来返回,区别于单个返回值,多个返回值时需要使用逗号分隔开数据以元组形式返回,同样也可以把返回值按照顺序赋值给多个变量
例18:
import pymysql
def ConnectMysql():
charset_ = 'utf8'
conn = pymysql.connect(host="localhost",port=3306,user="root",password='123456',charset=charset_)
cursor = conn.cursor()
return conn,cursor #返回所需要的值
def GetDatabases(cursor):
show_databases_sql = "SHOW DATABASES"
cursor.execute(show_databases_sql)
show_databases_sql_result = cursor.fetchall()
print("一共存在以下%s个数据库:"%len(show_databases_sql_result))
for databases in show_databases_sql_result:
print(databases)
if __name__ == "__main__":
conn,cursor = ConnectMysql() #将返回的值赋值给其他变量,函数体外也可以使用该变量
GetDatabases(cursor)