python基础语法
一.基本数据类型
-
Number:数字
-
int: 整数
-
float: 浮点数
-
'2/2’得到的是一个浮点类型的结果,'2//2’得到的则是一个整型的结果;例如:
1/2=0.5 1//2=0
-
bool: 布尔类型,表示真(True)和假(False),布尔类型属于数字,可以通过int(True)和int(False)将布尔类型转化为数字,也可以通过bool方法将数字转换为bool类型,例如:
int(True)=1 int(False)=0 bool(10)=True bool(1.3)=True bool(0)=False
-
bool方法还可以用做非空判断:
bool('abc')=True bool('')=False bool([1,2,3])=True bool([])=False bool({1,1,1})=True bool({})=False bool(None)=False
-
complex: 复数
-
str:字符串,可以使用单引号,双引号和三引号表示字符串
-
获取一个字符的ascii码值:
ord("a")=97
-
多行字符串:使用三引号定义多行字符串
-
原始字符串:r’str’,原始字符串不会去识别转义字符,而是将其原样去输出
-
字符串运算:
-
+:把两个字符串拼接起来
-
*:例如’hello’*3,表示把’hello’这个字符串重复3次
-
访问字符串中的任意一个字符:例如
'hello'[1]='e','hello'[-1]='o'
-
截取字符串的字串:例如:
'hello'[0:4]='hell' 'hello'[0:-1]='hell' 'hello'[1:]='ello' 'hello'[-3:]='llo'
-
-
列表:类似java中的数组,不同的是,在python中,列表中的每一个元素可以是任意的数据类型
-
列表的基本操作:
-
访问列表中的元素:例如
["a", "b", "c", "d", "e", "f"][1]="b"
-
截取子列表:例如:
["a", "b", "c", "d", "e", "f"][0:3]=['a', 'b', 'c'], ["a", "b", "c", "d", "e", "f"][0:-4]=['a', 'b'], ["a", "b", "c", "d", "e", "f"][3:]=['d', 'e', 'f'], ["a", "b", "c", "d", "e", "f"][-4:]=['c', 'd', 'e', 'f'],
-
将两个列表拼接成一个新的列表:
["a", "b", "c", "d"] + ["e", "f"] = ['a', 'b', 'c', 'd', 'e', 'f']
-
将列表中的所有元素按顺序重复3次:
["a", "b"]*3=['a', 'b', 'a', 'b', 'a', 'b']
-
-
元组:(1,2,3,True,False)
-
元组的基本操作:与列表类似
-
定义只有一个元素的元组:
(1)会被运算为1,所以应写成(1,)
-
字符串、列表、元组都属于序列,其中字符串和元组属于不可变类型
-
判断一个元素是否在序列中:使用’in’或者’not in’关键字,例如:
2 in [1,2,3]=True 2 not in [1,2,3]=False
-
计算一个序列内部包含多少个字元素:使用len方法,例如:
len([1,2,3])=3
-
计算一个序列中最大的元素:使用max方法
max([1,2,3,4])=4
-
计算一个序列中最小的元素:使用min方法
min([1,2,3,4])=1
-
-
集合:例如{1,2,3,4,5}
-
集合是无序的
-
集合没有索引
-
集合不能进行切片操作[0:5]
-
集合中的元素是不重复的,例如
{1,1,2,2,3,3,4,4}={1,2,3,4}
-
集合同样支持len方法、‘in’、'not in’关键字
-
剔除集合中的元素(补集):
{1,2,3,4,5,6} - {3,4} = {1,2,5,6}
-
找出两个集合中共同的元素(交集):
{1,2,3,4,5,6} & {3,4} = {3,4}
-
将两个集合拼接,并去除重复(合集):
{1,2,3,4,5,6} | {3,4,7} = {1,2,3,4,5,6,7}
-
定义一个空的集合:
set()
-
字典:很多个key:value组成的集合,{key1:value1, key2:value2},其中key必须使用不可变类型
-
二.进制的表示与转换
-
二进制的表示:python中表示二进制只需在数字前面加’0b’即可,例如:
'0b10'表示二进制的101
-
八进制的表示:python中表示八进制只需在数字前面加’0o’即可,例如:
'0o10'表示八进制的10
-
十六进制的表示:python中表示十六进制只需在数字前面加’0x’即可,例如:
'0x10'表示十六进制的10
-
将其他进制的数转化为二进制:使用bin方法,例如:
'bin(10)='0b1010',即将十进制的10转化为二进制'
-
将其他进制的数转化为十进制:使用int方法,例如:
'int(0b111)=7, 即将二进制的111转化为十进制'
-
将其他进制的数转为十六进制:使用hex方法,例如:
'hex(888)='0x378', 即将十进制的888转化为十六进制'
-
将其他进制的数转为八机制:使用oct方法,例如:
'oct(0x777)='0o3567', 即将十六进制的777转化为八进制'
三.变量与运算符
-
定义一个变量:
A = [1,2,3,4,5,6]
-
变量的命名规则:
- 不能以字母、数字、下划线开头
- 系统关键字不能用在变量命名中
- 运算符不能用在变量命名中
-
可变与不可变:
- 不可变:在python中,不可变是指要改变一个变量的值,必须重新创建一个新的出来
- 可变:在python中,可变是指不需要重新创建一个新的,就能改变变量的值
-
值类型和引用类型:
- 值类型:int、str、tuple,不可改变
- 引用类型: list、set、dict,可改变
-
算术运算符:
- ‘+’、’-’、’*’、’/’
- ‘//’:取整
- ‘%’:取余数
- ‘**’:平方
-
赋值运算符:
- ‘=’
- ‘+=’、’*=’、’/=’、’%=’、’**=’、’//=’:先运算,再赋值,例如:c += 1 等价于 c = c + 1
-
关系运算符:
- ‘==’、’!=’、’>’、’<’、’>=’、’<=’,关系运算符的返回结果为bool类型,不只是数字才能做比较运算
-
逻辑运算符:
- ‘and’、‘or’、‘not’,逻辑运算符操作的是bool类型,返回的也是bool类型
- 对于int、float,0被认为是False,非0被认为是True
- 对于字符串,空字符串被认为是False,非空会被认为是True
-
成员运算符:
- ‘in’:一个元素是否在一组元素里
- ‘not in’:一个元素是否不在一组元素里
- 字典的成员运算:字典的成员运算是针对key来做运算的
-
身份运算符:
- ‘is’、‘is not’:比较两个变量的内存地址是否相等
-
判断变量的类型
-
使用isinstance方法来判断,例如:
a = 1, isinstance(a, int) = True
-
-
位运算符:把数字当作二进制进行运算
- ‘&’:按位与
- ‘|’:按位或
- ‘^’:按位异或
- ‘~’:按位取反
- ‘<<’:左移
- ‘>>’:右移
四.分支、循环、条件、枚举
-
表达式:表达式是运算符和操作数所构成的序列
-
表达式的优先级
-
条件控制语句:
``` 条件控制语句 ``` ACCOUNT = "gale" PASSWD = "123456" print("please input the account:") USER_ACCOUNT = input() print("please input the passwd:") USER_PASSWD = input() #在python中是通过冒号换行和缩进来区分条件语句的开始和结尾 if USER_ACCOUNT == ACCOUNT and USER_PASSWD == PASSWD: print("success") else: print("fail")
-
while循环:
# 在python中是通过冒号换行和缩进来区分while语句的循环体的开始和结尾 # 递归的场景中适合使用while循环 while condition: pass
-
for循环:
# 主要用于遍历序列、集合、字典 # 可以使用break跳出当前循环体 # 可以使用continue结束本次循环,继续下一次循环 for target in expression_list: pass # 使用range函数控制循环次数 for x in range(0, 10): pass # 等价于java的: for(int i=0; i<10; i++) { } for x in range(0, 10, 2): pass # 等价于java的: for(int i=0; i<10; i += 2) { } for x in range(10, 0, -2): pass # 等价于java的: for(int i=10; i>0; i -= 2) { }
五.包、模块、函数、变量作用域
-
在python中,一个包对应一个文件夹,一个模块对应一个文件
-
区分不同包下的两个同名的模块:通过’包名.模块名’来区分
-
如果想让一个文件夹成为一个包,在这个文件夹下必须有一个特定的文件:'init.py’文件
-
init.py文件对应的模块名字是_init__.py所在包的名字,也就是__init__.py文件所在的文件夹的名字
-
导入模块: 当在一个模块中导入了另一个模块后,可以在当前模块中使用另一个模块中的变量和函数和类
-
使用import关键字:
import module_name print(module_name.variable)
-
使用import配合as关键字:
import module_name as alias_name print(alias_name)
-
使用from import关键字:
from pkg_name/module_name import module_name/variable print(variable)
-
__all__配合*:
``` t包下的m1.py文件 ``` __all__ = ['a', 'b'] a = 1 b = 2 c = 3 ``` 和t包同级的m2.py ``` # 从t包下的m1模块中引入所有被__all__包含的变量,如果m1模块中没有__all__变量,则m1中所有的变量和函数会被引入 from t.m1 import * print(a) print(b) print(c) #报错
-
-
_init_.py的使用:
-
当一个包或包下面的模块或变量被导入的时候,这个包下的__init__.py文件会被自动执行
-
可以通过__init__.py文件批量导入一个包下面的模块:
``` p包下的子包t下的__init__.py 并且p包下包含m1.py、m2.py、m3.py三个模块 ``` __all__ = ['m1', 'm2'] ``` p包下的m4.py模块 ``` from t import * #t包下的m1、m2模块被批量导入
-
-
包与模块的注意事项:
- 包和模块不会被重复导入
- 避免循环导入
- 当在导入一个模块时,python会首先执行该模块中所有的代码
-
模块内置变量:
- 使用dir方法可以查看模块中的所有内置变量
- _name_:模块名(包名.模块名)
- _package_:当前模块所在的包名
- _file_:当前模块所在的文件路径
- _doc_:当前模块的文档注释
-
入口文件和普通模块内置变量的区别:
- 入口文件和普通模块:当通过python3 **.py执行时,**.py即为入口文件,在入口文件中导入的其他模块即为普通模块
- 入口文件所对应的模块不属于任何包
- 入口文件的模块名固定为’main’
-
模块内置变量__name__的经典应用:
# 使python模块即可以作为入口文件,也可以作为普通模块 if __name__ == '__main__': pass
-
相对导入和绝对导入
- 顶级包:和入口文件同级的包
- 在入口文件中只能使用绝对导入
- 绝对导入必须从顶级包开始
- 使用from import来进行相对导入
- 使用相对导入对模块进行导入时,不能超过被引入模块的顶级包
六.python函数
-
函数的定义和调用
-
函数的定义
def funcname(parameter_list): pass
-
-
函数调用:在python中,必须保证被调用的函数已经事先被定义好了
-
函数的参数列表可以没有
-
在函数体中可以使用return关键字来返回函数调用的结果
-
如果函数体里面,没有使用return关键字,则该函数被调用后默认会返回None
来源:CSDN
作者:andr_gale
链接:https://blog.csdn.net/gzx110304/article/details/104136447