例子:
①必选参数
②默认参数(缺省参数)
要注意的时在默认参数后面不能有必选参数(如:(a,b=20,c)是不可以的)
③可变参数
当参数的个数不确定时使用,*来定义,且要在关键字参数之前
④关键字参数
在函数题内,关键字参数是一个字典类型,** 来定义,且参数的 个数不限
综合例子
return可以返回一个值或多个值,当返回一个值时返回的是那个值;而返回多个值时则返回一个包含多个值的元组;当有返回多个值且有多个变量接收时值会被一一对应赋值
可以通过global关键字来把局部变量提升为全局变量
可以通过nonlocal关键字来提升局部变量
所以我们了解到在python中万物皆对象,且在函数调用的时候实参传递的时对象的引用(地址)
python中使用lambda关键字创建匿名函数,所谓匿名即这个函数没有名字不用使用def关键字创建标准的函数;它自带return,且return的结果为表达式的结果,它一般用做参数传入函数
语法:lambda 参数1,参数2,参数3:代码表达式语句
例如:
map函数会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
map(function, iterable, …)
函数会对参数序列中元素进行累积。函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
reduce(function, iterable[, initializer])
函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
filter(function, iterable)
递归函数定义时要注意两个方面,一个是有明确的结束条件,另一个是自己调用自己;它有逻辑简单等优点,但同时它会更加容易导致栈溢出等问题;可用于实现树形结构的遍历
python的内置函数传送门
abs() – 求绝对值
round(x[, n]) – 对x取近似值,保留n位小数,默认为四舍五入,若n大于实际小数部分长度则不进行操作
pow(x, y[, z]) – 函数是计算 x 的 y 次方,如果 z 在存在,则再对结果进行取模,其结果等效于 pow(x,y) %
divmod(a, b) – 函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)
max(iterable) – 最大值,其参数可为x, y, z, …
min(iterable) – 最小值,其参数可为x, y, z, …
sum(iterable[, start]) – 对序列进行求和计算。iterable为可迭代对象(如:列表、元组、集合),start为指定相加的参数,如果没有设置这个值,默认为0
eval(expression[, globals[, locals]]) – 用来执行一个字符串表达式,并返回表达式的值。expression – 表达式。globals – 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。locals – 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
int() – 转为int,下取整
float() – 转为float
str() – 转为str
ord() – 字符转数字
chr() – ASCII码转为字符
bool() – 转为boolean类型
bin() – 转为二进制
hex() – 转为十六进制
oct() – 转为八进制
list() – 元组转为list
tuple() – 列表转为tuple
dict() – 创建dict
bytes() – 转为字节数组
all() – 用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。元素除了是 0、空、None、False 外都算 True。
any() – 用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 False,如果有一个为 True,则返回 True。元素除了是 0、空、FALSE 外都算 TRUE。
sorted() – 对所有可迭代的对象进行排序操作。sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
reverse() – 用于反向列表中元素。
range() – 可创建一个整数列表
zip() – 用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
enumerate() – 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
面向过程是指按照解决问题的步骤进行编写程序,而面向对象是指把事物的具体特征抽象出来形成类再进行编写程序的
类是一个模板,模板里面可以有方法;而对象是根据类创建的实例,可通过实例对象使用类里面的方法;并且在类的内部,使用def关键字可以定义一个实例方法,与一般函数定义不同,实例方法必须包含参数self且它必须为第一个参数(名字不一定为self,这里是约定俗成);同时在类内可以定义不同的类属性(方法外面定义的属性)与实例属性(在方法内使用self.属性名定义而得的);无论是实例方法还是实例属性都是属于实例本身的;python构造方法包括创建对象和初始化对象,在python当中,分为两步执行:先执行__new__方法,然后执行__init__方法,同时头尾双下划线的方法(属性)也被叫做魔法方法(属性),魔术方法会在某个特殊的时候被自动执行
self和实例对象指向同一个内存地址,可以认为self就是实例对象,相当于java里面的this
__init__() – 是当实例对象创建完成后被触发的,然后设置对象属性的一些初始值。
__str__() – 是在print对象时被触发,打印对象的信息以测试的时候使用,因为如果不用的话会就只输出对象的地址而不会有其他的信息,注意要用return,与java里面的toString()类似
__new__() – 是在实例创建之前被触发的,因为它的任务就是创建实例然后返回该实例,先于init函数的执行
__call__() – 在把对象当作函数来调用时触发,且执行该函数里面的内容(例如:它可以执行 x1(1,2)这样的函数,而不是x1.__call__(1, 2))
__del__() – 在程序运行结束后进行对象销毁的时候触发这个方法,来释放资源
例如:
注意事项:
例一:
例二:
当一个对象没有在被引用的时候,它会被删除或被销毁,此时python解释器会默认调用一个方法,这个方法为 __del__(),它也被称为析构方法,简单的说这个函数并不对对象进行销毁,而只是在系统内部执行销毁时调用这个函数;del关键字可以销毁对象
类属性就是类拥有的属性,它被该类的所有实例对象共有,类和实例都可以访问它;实例属性为对象所有的属性,只能通过实例对象访问;要注意的是不同的实例对象的类属性是同一个指向(地址相同);同时出现类属性与实例属性时,实例属性优先级高
因为在访问私有属性时必须通过类里面的方法调用,这样很别扭,因为我们想用属性却调用了方法,所以property应运而生,他解决了在使用属性时调用方法的这种奇怪场景。它有两种实现方法:①利用property属性函数②利用装饰器,但要注意顺序
子类可以重写父类的方法,且子类会继承父类的公开的方法与属性,子类的方法优先级大于父类的方法
当多个父类中有相同的方法时,查询的顺序为广度优先,同级则从左到右
例如:
多态是指同一个行为具有多个不同表现形式或形态,因为Python是天生支持多态的,且它的写法不同于Java和C#这一类强类型语言中的多态的写法,所以它可利用“鸭子类型”来实现多态;但要实现多态有两个前提:继承与重写。同时也要注意isinstance()函数的使用
好处:它增加程序的灵活性与扩展性
单例模式是常用设计模式的一种,也就是说这个整个系统中只有一个实例,重复打并也是使用这个实例。简单的说就是不管创建多少次对象,类返回的对象都是最初创建的,不会再新建其他对象。
python是动态语言,在运行的时候可以动态添加属性。如果要限制在运行的时候给类添加属性,Python允许在定义class的时候,定义一个特殊的 __slots__变量,来限制该class实例能添加的属性。只有在 __slots__变量中的属性才能被添加,没有在_slots_变量中的属性会添加失败。它可以防止其他人胡乱添加属性和减少内存消耗。子类不会继承父类的__slots__属性,但当子类也声明__slots__属性时此时的slots值就为父类于子类的并集,所以注意slots不要重复写
自定义异常都需要直接或间接继承Error或Exception,且要使用raise关键字
还不懂的可以点击这里
列表推导式就是对旧列表进行某些操作然后返回一个新列表
语法:[out_express for out_express in input_list if out_express_condition]
例1:
例2:
例3:
集合推导式类似于列表推导式,只是把[]换成{}并返回一个新的集合
字典推导式类似于列表推导式,只是把[]换成{}并返回一个新的字典
只需要把一个列表生成式的 []改成(),就创建了一个generator
函数里有了yield后,执行到yield就会停住,当需要再往下算时才会再往下算。所以生成器函数即使是有无限循环也没关系,它需要算到多少就会算多少,不需要就不往下算。可以简单地把yield n 理解为 return n + 暂停
当然其实平常很少用到next()或__next__(),我们直接用for循环就可以遍历一个generator,其实for循环的内部实现就是不停调用生成器的下一个值。
可迭代对象有列表、元组、字符串、生成器、集合、字典
单下划线(_xxx):前面加一个下划线以单下划线开头的表示的是protected类型的变量,即保护类型只能允许其本身写子类D行访问,不能使用from xoxx import *的方式导入。
双下划线(__xxx):为私有属性
头尾双下划线(__xxx__):前后两个下滑线,魔法方法(属性),一般是python自有,开发者不要创建这类型的方法。
尾单下划线(xxx_):避免属性名与python关键字冲突。
super() 用于调用父类
函数、列表、字典每次定义都会开辟一块空间
本文只用于个人学习与记录
本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:xinmeigg88@163.com
本文链接:http://www.ksxb.net/tnews/3080.html