起名法则:
标识符是由字符(A~Z 和 a~z)、下划线和数字组成,但第一个字符不能是数字。 标识符不能和 Python 中的保留字相同。 Python中的标识符中,不能包含空格、@、% 以及 $ 等特殊字符。 在 Python 中,标识符中的字母是严格区分大小写的
可变对象:list dict set
不可变对象:tuple string int float bool
语法基础
切片的语法:[起始:结束:步长] 字符串[start: end: step] 这三个参数都有默认值,默认截取方向是从左往右的 start:默认值为0;end : 默认值未字符串结尾元素; step : 默认值为1;如果切片步长是负值,截取方向则是从右往左的
字符串常用函数:
count 计数功能:显示自定字符在字符串当中的个数
find 查找功能:返回从左第一个指定字符的索引,找不到返回-1
index 查找:返回从左第一个指定字符的索引,找不到报错
split 字符串的拆分:按照指定的内容进行分割
replace 字符串的替换:从左到右替换指定的元素,可以指定替换的个数,默认全部替换
strip字符串标准化:默认去除两边的空格、换行符之类的,去除内容可以指定
字符串的格式化输出:%
list常用函数
添加新的元素
list1.append(‘g’) # 在末尾添加元素
list1.insert(2, ‘ooo’) # 在指定位置添加元素,如果指定的下标不存在,那么就是在末尾添加
list2 = [‘z’,‘y’,‘x’]
list1.extend(list2) #合并两个list list2中仍有元素
count 计数 和 index查找
删除元素
print(list1.pop(3))
list1.remove(‘a’)
列表生成式:生成器
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
函数:函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
函数代码块以 def 关键开头,后接函数标识符名称和圆括号()。
任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
参数传递
位置参数
位置参数是最简单的一种函数调用的方式。位置参数须以正确的顺序传入函数、数量必须和声明时的一样。
def student_name_and_age(name, age):
print(‘姓名:%s 年龄 %s’ %(name, age))
缺省参数
调用函数时,缺省参数的值如果没有传入,则被认为是默认值。
def student_name_and_age(name, age=‘不愿透露’):
“设置默认参数”
print(‘姓名:%s 年龄 %s’ %(name, age))
可变参数
顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。
***参数
***参数允许你传入0个或任意个含参数名的参数,这些***参数在函数内部自动组装为一个dict。
命名***参数:如果要限制***参数的名字,就可以用命名***参数
参数的组合:在Python中定义函数,可以用必选参数、默认参数、可变参数、***参数和命名***参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名***参数和***参数。
变量的作用域和global变量
1.局部变量 作用域:在函数内
2.全局变量 作用域:在函数外
函数优先使用局部变量 在没有局部变量的情况下, 使用全局变量
lambda匿名函数
python 使用 lambda 来创建匿名函数,lambda 只是一个表达式,函数体比 def 简单很多,lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
虽然 lambda 函数看起来只能写一行,却不等同于 C 或 C++ 的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
lambda 若干个输入参数 : 返回值的表达式
lambda arg1, arg2: arg1 + arg2
高阶函数:map / reduce
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
reduce: 用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,依此类推,最后得到一个结果。
sorted
排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。
闭包:python中的闭包从表现形式上定义(解释)为:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure);返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。
装饰器
顾名思义,从字面意思就可以理解,它是用来"装饰"Python的工具,使得代码更具有Python简洁的风格。换句话说,它是一种函数的函数,因为装饰器传入的参数就是一个函数,然后通过实现各种功能来对这个函数的功能进行增强。
偏函数:通过设定参数的默认值,降低函数调用的难度
模块:安装/卸载第三方模块
使用类的好处:降低复杂性,更少的bug,提高可维护行
类可以将数据与函数绑定在一起,使代码模块化
调用数据和函数,使用对象名.的方式,使代码更加优雅
面向对象的世界
代码通常称为类的方法,数据通常称为类的属性,实例化的对象称为实例
如何定义类
第一部分:class定义类的***,Athlete符合python标识符命名规则,:表示类内容的开始def __init__(self,a_name,a_dob=None,a_times=[]
第二部分:def定义函数的***,init 方法是一个特殊方法会在实例化对象时自动调用,我们会在这个方法中对数据进行赋值。self作为类中函数的第一个参数,方便该方法调用该类的其他属性和方法。
第三部分:自定义的属性和方法
如何使用类
1.创建对象:对象名 = 类名(参数)
2.使用.调用类的方法和属性:对象.属性名;对象.方法名();私用的属性和方法的定义;在属性和方法名前加 __ 两个下划线
面向对象:这个是接着讲类和对象的知识,类的继承和多态 也是以案例需求来讲解,容易理解一点
定义:class 子类名(父类名):
情况1,如果子类有新增的属性,那么需要在子类__init方法中,调用父类的__init__
情况2,如果子类没有新增的属性,子类不需要写__init__方法
使用:对象名 = 子类名(参数)
继承的好处:代码重用,升级功能(重写),新增功能(新的方法)
方法重写:子类方法与父类方法完全相同,子类若重写了父类的方法,则子类对象调用方法时就是调用的自己类中重新的方法。
多继承
文件操作与常用模块的使用
也是通过案例需求来理解知识点
文件处理模型:输入,处理,输出。
处理:标准化数据,切分数据,top3(最快的3个时间)
输出:将每个人的信息打印在屏幕上显示
open() 为bif(内置函数),参数有多个,必须的是文件路径。 返回的一个文件对象。
file.readline(),读取文件中的一行。
open(‘work/data.txt’,‘w’)第一个参数文件路径,第二个参数打开文件的模式
f.write(‘this is file content’)参数为写入的内容 f.close()关闭文件