- python是一种语言,不是框架。
- 想好以后再动手,梳理思路。
- 易于上手,难于精通。
- 既有动态脚本的特性,又有面向对象的特性,非常具有自己的特点。
- 编译型语言(C C++),解释型语言(JS python)。
- 运行效率和开发效率不可兼得。更关注开发效率。
- python??? 爬虫、大数据与数据分析、自动化运维与自动化测试、web开发、机器学习(tensor flow)、胶水语言
- 基础!!!很重要
- 《流畅的python》
- 1python oj 可以刷题
- 先学习python? 然后数据库 然后web开发 Django Flask。
- 使用虚拟环境 可以多版本python共同使用。
- IDLE
- 加不加分号都可以,通过缩进控制代码格式
- 整数int??? 浮点数float(其他语言中单精度用float双精度用double),在pthon中没有单精度和双精度之分,(其他语言中整数有short int long之分),python中没有分别。?? python2中有long 类型。
-
- 乘法通过*表示? 1*1
- 除法通过/表示? 2/2 结果是一个float浮点型?? 2//2得到的结果是一个整型。
- 0b表示二进制?? 0b10==2.
- 0o表示八进制??? 0o11==9.
- 0x表示十六进制? 0x。
- 进制转换? bin(x) 把x转换为二进制?? int 转换为10进制? hex转换为16进制 oct转换为八进制。
- bool布尔类型表示真、假。
- complex复数
- True? False开头一定要大写!!!
- int (True)==1? int(False)==0
- bool(1)==True??? bool(0)==False? bool(非0)==True
- bool(x)? x为空时,也表示False。
- None也表示False
- 复数x=2.4+5.6j??? x.real获取复数的实部2.4? x.imag获取复数的虚部5.6。
- 1 和'1'不同,一个是数字,一个是字符串??
- 引号要使用英文的
- 单引号和双引号的区别:表示字符串时引号成对出现 会不然出错? “let's go”? 或者是'let\'s go'? \是转义字符
- 屏幕宽度有限,每行最大字符79.
- '''???? 可以放入多行字符'''???????? """????? xxx??????? """? ??
- ?\n表示回车?? 输入的\n要起作用的话 要放入print中输出
- 特殊的字符? 有一部分是为了表示我们无法看见的字符
- 有一些是表示与本身语法有冲突的字符
- \n 换行 \'单引号 \t横向制表符等?
- \r回车? \n换行不是一个概念
?
- print('hello \\n word')????? hello \n word?? 用于输出文件路径等
- print(r'hello \n word')??????? hello \n word?? 加上r变成了原始字符串。
-
"hello"+"world" | ?? 'helloword' | "hello"*3 | ?? 'hellohellohello' | "hello world"[0]? | ?h | "hello world"[-1] | d |
- ? -n? 代表从末尾获取字符
-
“hello world”[0:5] | hello | "hello world"[0:-1] | hello worl | "hello world"[6:11] | world | “hello world”[6:] | world | [-4:] | |
- 后面数字大于长度时,会按照最后一个字符截取。
- list? 列表? [1,2,,3,4,5,6,'hello',True]?? 列表是有序的
- [[1,2],[True,False]]
-
[1,2,3][0]? | ?? 1 | [1,2,3][0:2]?? | [1,2] | [1,2,3][-1:] | 3 | ?[1,2,3][0:-1] | [1,2] |
- 更改列表里面元素的值? [1,2,3]+[4,5]??? [1,2,3,4,5]
- [1,2,3]*3? [1,2,3,1,2,3,1,2,3]
?
- (1,2,3,4)[0]?? 1?? 元组是有序的
- (1,2,3)+(4,5)?? (1,2,3,4,5)
- (1,2)*3? (1,2,1,2,1,2)
- 元组只有一个元素时,显示类型? type((1))? 为ing 类型,会自动识别为()运算符? 一个元素要加逗号(1,)
-
in?? | ?3 in [1,2,3]?? | True | not in?? | ?3 not in [1,2,3]? | False | len | ? len([1,2,3]) | ?3 | max | max([1,2,3]) | 3 | min | min([1,2,3]) | 1 | max | max('helloworld') | w | min | min('helloworld') | d |
- 编码问题?? ASCII码?? ord('w')? 119??? ord('d')? 100
- {1,2,3,4,5,6}?? set 是无序的
-
1 in {1,2,3}?? | True | 1 not in {1,2,3} | False | len({1,2,3}) | 3 | {1,2,3,4,5}-{3,4} | {1,2,5} | {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} |
- type(set())????? <class'set'>
- len(set())??? 0
?
- 由很多key和value组成
- {key1:value1,key2:value2…}
-
type({1:1,2:2,3:3})? | ?? <class 'dict'> | {1:1,2:2,3:3}[1]?? | ?1 | {1:1.1,1:2.1,2:3,3:4}[1] | 2.1 |
- 字典不可以有重复的key
- value类型可以是任何? str int float list set dict??
- key必须是不可变的类型? int str tuple
- 空的用{}表示
?
- 变量首字符不能是数字,后面可以使字母数字下划线
- 系统有保留关键字? and if import等
- 变量区分大小写,没有类型的限制
- int str tuple是值类型,list? set? dict是引用类型,引用类型是可变的,值类型是不可变的
- id 函数? 显示变量在内存中的地址
- list? b=[1,2,3]? b.append(4)??? print(b)? [1,2,3,4]
- tuple b=(1,2,3)? b.append(4)报错!!
-
访问元组里面的列表? a=(1,2,3,[1,2,4])? | a[3][2] | 4 | a=(1,2,3,[1,2,['a','b','c']]) | a[3][2][1] | 'b' |
- 元组里面的列表是可以改变的
- + - * /? // %(余数) **(N次方? 2**5=32)
- =? +=? *=? /=? %=? **=
- c=1把1赋值给变量c??? c=c+1? c+=1
- python中没有自增和自减运算符
- 并非只有数字才能进行比较? 字母进行比较是比较他们的ASCII
- 字符串进行比较的时候,是每个字母单独拿出来作比较,只要第一位小总体就判定为小
- 列表进行关系运算的时候,也是先比较列表的第一个字符,元组也相同
- and 表示且 同为真为真;or 有一真为真;not 相反
- int float类型时,0是False???? str 空字符串为False(not'0'? False)
- []为空被认为False?????? [1] or []? 返回[1]??
- ?1 and 2? 返回2??
- 1 or 2? 返回1
- in? ;? not in
- 用来判断一个元素是否在一组元素里面
- a in [1,2,3,4,5,6]??? a在返回True? 否则返回False
- not in 和他们相反
- 可以判断? 列表元组集合
- 字典的成员运算,是针对key的值,只有key里面存在时,才返回true
- is ; is not
- 最终返回布尔值
- 两个变量取值相同,则is返回True
- is 和==是有区别的,关系运算符是比较两个变量的值是否相同,身份运算符是判断内存地址是否相同,变量取值相同并不代表身份相同
- python里面都是对象
- isinstance判断类型??
- 对象的三个特征,id? value? type 分别对应is? == isinstance
- 可以对其他进制进行运算,会转化为二进制进行计算
- &按位与? 同一位一,否则为零
- | 按位或 有一为一 无一为零
- 表达式是运算符与操作数所构成的序列
- 优先级!!!? 算术运算符优先
- 优先级or < and < not
- 首先打开新文件,然后选择目录进行保存,保存后编写代码再进行保存,按住win+r输入cmd进入命令行,进入命令行后找到相应的py文件,输入python 文件名.py进行执行。
- 在哪里写代码都是可以的,只要保存成py后缀的就可以运行
- pycharm? vscode? sublime? 三个IDE(Integrated Development Environment)集成开发环境,初学建议利用vscode
- 按ctrl+~可以弹出命令行(开发者选项)
- #后面的是注释,编译器不执行
- python -V?? 查看python版本
- if else??? for??? while
- #单行注释???? '''?? 多行注释? '''
- input()获取输入
- if :
else:
- constant 常量
- python里面不存在常量,不存在改变值的机制
- 一个python文件是由多个模块构成的
- 定义的变量不是位于函数和类里面 pylink自动默认为常量
- snippet片段? 帮助快速构建代码片段
- pass占位语句,保证代码的完整性
- if:??? elif:??? elif:??? else:???
- python没有switch
- input()输入a,输入1默认1是字符串 需要a=int(a)来进行转换
- 计算机通过循环或者穷举的方式来解决问题
- while后面不应该是一个常量
- for和while不同,主要是用来遍历 循环,序列或者集合字典
- a=['apple','orange','banana','grape']
for x in a:
print(x)
x代表当前循环列表里面的某个元素
for循环内部还可以再嵌套循环
- a = ['apple','banana','juice']
for x in a :
print(x,end='')? 其中end代表输出x后结尾的格式,默认为\n
- a = [['apple','banana','juice'],(1,2,3)]
for x in a :
for y in x :
print(y,end='')?? 可以输出里层元素
- for?? else:? 当列表里面所有元素都被遍历完成以后就会执行else
- break语句是跳出循环? ;? continue语句是跳出本步循环,继续下一步循环
- 双层循环的时候break只能跳出内部循环!!!
- for循环中的break跳出循环仍然会执行else
- for x in range(0,10):
print(x)?? 输出0到9十个数字
0代表起始数字,10代表数量
- for x in range(0,10,2):
print(x)?? 输出0到9十个数字
0代表起始数字,10代表数量? 2代表间隔
- for x in range(0,10,2):
print(x,end='|')?? 输出0到9十个数字
输出间隔为|?? 间隔也可以为负数?
- 列表的切片 b = a[0:len(a):2] 前两个代表把a的所有元素取出来,后面的数字代表每隔多长取一个 在某些情况下可以代替for循环
- 会写代码非常容易,写出好代码高性能,可复用,封装性强的代码很难
- 最顶级的组织结构是包(文件夹),第二个是模块(文件),第三个是类,函数和变量是类的特性,建议一个文件只有一个类,建议类和文件名同名。
- 不推荐直接把函数写在模块下。
- 其他语言中用dll或者jar表示包
- 命名空间,包和模块的名字,也是路径
- 包下面可以有子包
- python如何区分一个普通的文件夹和一个包?要在包下面加入特定的文件(__init__.py),它本身也是一个模块,可以在其中编写代码,特殊的init文件的名字是他的包名。
- 重复的东西,需要从其他模块引用。
- c7是模块名,其他模块要调用c7下面的a变量,需要导入,导入规则为:
import c7
print(c7.a)
在子包里面的时候,需要加上他的命名空间
- import只能导入模块,不能导入变量
- import t.c7 as m?? 改变命名
- from t.c7 import a????????? print(a)
- 导入的是变量,不需要在使用的时候加入命名空间
- from t import c7?? print(c7.a)??
- 导入的是模块,所以使用的时候需要加上模块
- from t.c7 import *?? ???print(a)?? print(b)?? print(c)
- 导入模块中的多个变量
- __all__ = ['a','c']?? 代表使用*进行导入的时候,只导入ac两个变量
- 引入方式:from c9 import a,b,c
- python 换行 在要换行的地方加入一个\
- 换行也可以加入括号,括号可以跨行
- python会自动执行__init__.py的代码
- 做批量导入,在__init__.py里面可以加入多个import,在其他模块里面可以import t?? print(t.sys.path)
- 包不会被重复导入,避免循环导入
- 一个应用程序只有一个入口文件
- dir()函数可以得到内置变量
- __name__
- __package__
- __doc__
- __file__
- round 函数用括号传递两个参数,round(a,2)保留a小数点后面两位
- 函数之间可以嵌套
- python有内置函数
- 命令行下help(round)可以输出相关信息
- 函数:功能性、隐藏细节、避免编写重复的代码
- 组织代码 自定义函数
- python使用def定义函数
def funcname(parameter_list):
pass
- 参数列表可以没有 、 可以使用return返回一些值,如果没有默认返回none
- python代码有顺序,先定义后调用,不然会报错
- import sys
sys.setrecursionlimit(1000000)设置最大递归层数
- 函数运行到return 时,函数便会运行终止
- 返回两个参数return a,b? a和b自动被默认为元组
- 利用序号访问特定变量结果的方法
- a,b,c = 1,2,3? 分别赋值??? a=b=c = 1也可
- 一个变量接收三个赋值时,变量为元组tuple
d = 1,2,3
a,b,c = d? 序列解包
- 必须参数:参数的最基本一种
- 形参,形式参数 a = add(x,y)?? x,y
- 实参,实际参数 a = add(1,2)? 1,2
- 关键字参数:c = add(y = 3,x = 2)?? 明确调用参数时,参数指向,强调了代码的可读性
- 建议多参数利用对象进行传递
- def print_files(name,gender = '男' ,age = 18)默认后面两个变量的初始值
- 默认参数必须放在一起,不能穿插使用
- def demo(*param):
print(param)
print(type(param))
demo(1,2,3,4,5)?? //若传进元组 则会变为二维元组? 要变成a = (1,2,3,4,5)?? demo(*a)
(1,2,3,4,5)? //((1,2,3,4,5),)
<class 'tuple'>
- def demo(param):
pass
demo((1,2,3,4,5))
和上述相同,只是两种方法
- 可变参数可以和必须参数一起使用,但是必须参数必须放在前面
- def? demo(param1 , param2 = 2,*param):
- 绝大多数使用for循环来遍历可变参数
- def? squsun(*param):
sum = 0
for i in param:
sum +=i*i
print(sum)
- squsun(1,2,3)
- def city_temp(**param):
print(param)
print(type(parm))
city_temp(bj = '32c' , xm = '23c')
{'bj' : '32c' , 'xm' :'23c'}?? 生成了字典
当单一打印的时候 for c in param:?? printc? 打印出为键bj xm
打印键和值的时候? for key,value in param.items:????? print(key,':',value)
- a = {'bj' : '32c' , 'xm' : '23c'}
city_temp(**a)
- city_temp()
打印出的是{}?? //无法进入for循环? 需要在for循环前加入print(param)
- 改变形参? 变为def city_temp (param1 , **param):
传入参数为? city_temp (1)
打印结果为? print(param1)?? print(param)
?1??????????????????????? {}
- 函数外部定义的变量和函数内部定义的变量不同,函数内部的作用域仅仅局限于函数内部
- 函数外部变量的作用域叫全局变量? 函数内部的变量是局部变量? 函数外部的变量可以在函数内部使用
- 局部变量是一个相对概念!!
- python里面没有块级作用域
- ?优先使用局部变量
- 全局变量global
?
|