python如何定义一个函数?
函数的代码块以def关键字开头,后接函数标识符名称和圆括号
任何传入参数和自变量必须放在圆括号中间,圆括号中间可以用于定义参数
函数的第一行语句可以选择性的使用文档字符串,用于存放函数说明
函数内容以冒号起始,并且缩进
return[表达式]用于结束函数,选择性的返回一个值给调用者,不带表达式的return相当于返回None
lambda函数的概念
不需要指定函数的名字,这类函数被称为lambda函数,lambda函数又称为匿名函数,它是一个单行的小函数,语法简单,lambda函数可以接收任意多个参数(包括可选参数)
普通函数和lambda函数有什么异同点?
相同点:
都可以定义固定的方法和程序处理流程
都可以包含参数
不同点:
lambda函数代码更整洁,def定义的函数更直观,易理解
def定义的是普通函数,lambda定义的是表达式
lambda函数不能包含分支或者循环,不能包含return语句
关键字lambda用来创建匿名函数,而关键字def用来创建普通函数
python的函数参数传递方式是什么?
值传递指得是在调用函数时,将实际参数复制一份传递给形式参数,这样在函数中就可以修改形式参数,而不会影响到实际参数
引用传递:在调用函数时,将实际参数的地址传递给函数,这样在函数中对参数的修改将会直接影响到实际参数
对于可变数据类型(列表,字典),函数的传递方式是引用传递
对于不可变数据类型(数值型、字符串、元组)可认为传递方式是值传递
闭包的概念及特点
内部函数可以引用外部函数的参数和局部变量,当外部函数返回内部函数时,相关参数和变量都保存在返回的函数中,这种特性被称为‘闭包’
闭包是两个函数的嵌套,外部函数返回内部函数的引用,外部函数一定要有参数
闭包的特点:
必须有一个内嵌函数
内嵌函数必须引用外部函数的变量
外部函数的返回值必须是内嵌函数
闭包与正常函数的区别:
闭包格式是两个函数的嵌套
闭包外部函数的参数可以在内存中保持
闭包函数就如同一个类,只有在该闭包函数里的方法才可以使用其局部变量,闭包函数之外的方法不能读取其局部变量,这就实现了面向对象的封装性,更加安全可靠,闭包里的数据是独享的,不受外界影响
函数,在函数中,需要使用的全局变量在一定的程度上受限制,因为全局函数,不仅可以给一个函数使用,其他函数也可能会使用到,一旦修改会影响其他函数使用全局变量,全局变量不可轻易修改,函数的使用受一定限制
函数中*args和**kwarge的作用是什么?
*args没有key值,以元组形式传递
*kwarge有key值,以字典形式传递
读写文件常用的方法
open()打开一个文件
接收两个参数,文件名(file[必选,文件路径{绝对路径或相对路径}])和模式(mode[可选,文件打开模式])
python装饰器
装饰器本质上是一个python函数,可以让其他函数在不需要做任何代码改动的前提下增加额外功能,提高代码的复用性
装饰器其实就是一个以函数作为参数并返回一个替换函数的可执行参数,在不改动原函数代码的情况下,为其增加新的功能
python构造器
python构造函数有固定的名字,通常构造器的标识是__init__(self),构造方法也叫构造器
python生成器(Generator)
一边循环一边计算的机制,被称为生成器,生成器是实现迭代器的一种机制,其功能依赖于yield表达式
列表生成式和生成器的区别仅在于最外层的[]和(),()是生成器,[]是一个list
如果一个函数带yield关键字,那么这个函数不再是一个普通函数,而是生成器
生成器保存的是算法,每次调用next(),可以计算出下一个元素的值,直到计算到最后一个元素,生成器也是可迭代对象
python迭代器(Iterator)
可以被next()函数调用并不断返回下一个值的对象
特点:迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完才结束
迭代器有两个基本方法:iter()next()
可以直接作用于for循环的对象是可迭代的对象,字符串、列表、字典、集合、元组、对象都是可迭代对象,都可用于创建迭代器,生成器也属于可迭代对象