概述
Range():
格式:Range( start , end , step )
1. 返回list
2. List[ 0 ] 为start
3. 计数到end前停止,即不包含end
enumerate():
格式:for ( index, char ) in enumerate( s )
1. 可在每次循环中同时得到下标和对应元素
2. 返回值为元组,包含index 和char
zip():
格式:zip( 参数1,参数2,……)
1. 参数为可迭代的对象,zip将各迭代对象的对应元素组合成一个tuple,最后返回这些tuple组成的list。若传入参数长度不等,则返回的list长度与最短参数的所含元素数相同
3. 可以用来进行矩阵转置操作:
该操作也可以用列表推导得出:
两者间的区别在于返回的list对象中的 元素类型差别,zip得到tuple,表推导得到list
For:
1. 在for 循环内改变 i,实际循环量并不会改变
Center():
格式:string.center( width [ , fillchar ] )
1. 若 string的长度小于width ,则在string 两端平均插入 fillchar(差奇数个则前端多1个fillchar)
2. 只返回一个临时字符串,原string并不改变
Count():
格式: string.count( sub [ , start [ , end] ] )
1. 对于string,在其index的 start 到 end-1(即不包含end)中 查找 sub并返回其总数
2. End 超出string的长度并不会无法执行
3. Start的默认值为0,end默认值为len(string)
自定义函数
1. 关键字传递
可以用关键字来传递参数,不必局限于参数声明顺序,但关键字传递必须在位置传递之后
2. 有默认值的参数必须在没有的后面
3. 包裹传递:
格式:def func(* pos [,** key ] )
1. * pos 对应位置参数,** key 对应关键字参数
2. *pos 无参数读入,返回空元组,**key 无参数读入,返回空字典
3. 在未知要传递多少参数时使用
循环对象
生成器:
生成器(generator)的主要目的是构成一个用户自定义的循环对象。
生成器的编写方法和函数定义类似,只是在return的地方改为yield。生成器中可以有多个yield。当生成器遇到一个yield时,会暂停运行生成器,返回yield后面的值。当再次调用生成器的时候,会从刚才暂停的地方继续运行,直到下一个yield。生成器自身又构成一个循环器,每次循环使用一个yield返回的值。
表推导:
代码简单,实用价值高
函数对象
Lambda
格式:lambda参数1,参数2… :表达式
1. Lambda生成一个函数对象,可以赋给func
2. 表达式只可以写一行
函数对象可作为参数传递
Map()
格式:func=map(函数对象 , list[ ] )
1. Map( )是用 函数对象 对list中的每个元素进行操作
2. 如果有多个list,则对应的函数对象要有对应list个数的操作参数,多个list中的元素个数一般也要相同
3. 返回对象为一个进行操作后的list
Filter()
格式:filter(函数对象,list[ ] )
1. 将函数对象作用于list每个元素,若操作返回True,则该次操作后的元素被加入新的list中,否则,则过滤掉
Reduce( )
格式: reduce(函数对象func,list[ ] )
1. 要求函数对象中 要接受两个参数
2. 操作过程:先取出list中的第一个和第二个元素进行操作,将操作结果作为下次操作的 第一个参数,取list中的第三个元素作为 函数对象的 第二个参数,以此迭代下去 ,知道list中无剩余元素
动态类型
1. 引用和对象分离,是动态类型的核心。引用可以随时指向一个新的对象
第一个语句中,3是储存在内存中的一个整数对象。通过赋值,引用a指向对象3。
第二个语句中,内存中建立对象‘at’,是一个字符串(string)。引用a指向了'at'。此时,对象3不再有引用指向它。Python会自动将没有引用指向的对象销毁(destruct),释放相应内存。
2. 即使是多个引用指向同一个对象,如果一个引用值发生变化,那么实际上是让这个引用指向一个新的引用,并不影响其他的引用的指向。从效果上看,就是各个引 用各自独立,互不影响。
让a,b指向同一个对象 1,令a指向的一个新的对象3,这个过程中b指向的对象1没有发生变化,所以b的指向对象不变。
3. 但是如果指向不变,改变了指向对象本身呢?show the code:
原因何在呢?因为L1,L2的指向没有发生变化,依然指向那个表。表实际上是包含了多个引用的对象(每个引用是一个元素,比如L1[0],L1[1]..., 每个引用指向一个对象,比如1,2,3), 。而L1[0] = 10这一赋值操作,并不是改变L1的指向,而是对L1[0], 也就是表对象的一部份(一个元素),进行操作,所以所有指向该对象的引用都受到影响。
(与之形成对比的是,我们之前的赋值操作都没有对对象自身发生作用,只是改变引用指向。)
列表可以通过引用其元素,改变对象自身(in-placechange)。这种对象类型,称为可变数据对象(mutable object),词典也是这样的数据类型。
而像之前的数字和字符串,不能改变对象本身,只能改变引用的指向,称为不可变数据对象(immutable object)。
我们之前学的元组(tuple),尽管可以调用引用元素,但不可以赋值,因此不能改变对象自身,所以也算是immutable object。
4. 从动态类型看函数的参数传递
a) 如果参数是不可变对象,参数传递类似C#中的值传递。
b) 如果参数是可变对象,则参数传递类似于C#中的传指针,函数内参数变化,有可能影响原对象
最后
以上就是痴情凉面为你收集整理的python 部分常用函数 + 循环对象 + 函数对象 + 动态类型的全部内容,希望文章能够帮你解决python 部分常用函数 + 循环对象 + 函数对象 + 动态类型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复