函数的定义和调用:
def 函数名(参数1,参数2,参数3...):(也可以没有参数)
执行语句
return (没有返回值,返回None)
功能模块化,代码复用的,
func() 加括号就是调用
def func():
print('这是一个函数')
func() #函数调用
#func #函数对象
def func1(x,y):#定义参数
#定义时候写的参数,形参(形式参数)
print('和是:',x+y)
func1(2,3) #传参 2,3实际传递进来的参数叫做实参
必备参数:
必备参数必须以正确的顺序传入函数,调用时数量必须和声明时的一样
命名参数:(你的形参在定义的时候没有语法错误)
我们可以打乱顺序传递参数,也就是确定的传入参数值,可以跳过不传的参数值
缺省参数(默认参数):
def printme(age,name=’jack’) 设置缺省参数一定是从右向左
如果给默认参数传递了值,那么会覆盖掉之前的默认值
不定长参数:
你可能需要一个函数能处理比当初声明时更多的参数,这些参数叫做不定长参数,声明时不会具体定义
func(*arg)
他会默认把你传递进来的多个参数处理成元组类型
func(**arg)
传递参数的时候,要以键值对的形式,传递进来的多个键值对会默认处理成字典
def func1(**arg):
print(arg)
print(type(arg))
#不定长参数,两个*接受到的参数,他会帮你处理成字典
func1(a=1,b=2,c=3)
#ctrl + / 批量注释
返回值:
return 可以返回任意种类的对象,同时也能返回多个值,
def func():
return(1,2)
print(type(func()))
看起来这里的代码好像返回两个值,实际上只有一个,一个包含2个元素的元组,它的圆括号是可选的,这里省略了
*a 可以打包接受返回值,
也可以显式的修改返回值的类型。
def func(a,b,c):
return [a,b,c]
def func(a,b,c):
return list((a,b,c))
多态:
一个操作的意义,取决于被操作对象的类型
def add(x,y):
print(x+y)
add(1,2)
add('a','b')
add([1,2,3],['a','b','c'])
善变的女人帕瓦罗蒂
a = 1
def func():
a = 2
print('函数内部的a是:',a)
func()
print('函数外部的a是:',a)
全局作用域就是这个.py脚本
局部作用域就是函数func里面的区域
全局变量 : a
局部变量:a
global 语句,用来在函数内部声明一个全局变量
参数传递:
结果
[root@VM_86_19_centos 1-5-函数参数传递]# python 2.py
外部的a是: [1, 2, 3]
inside a is: ['a', 'b', 'c']
外部的a是: [1, 2, 3]
------------
外部的a是: [1, 2, 3]
inside a is: [1, 2, 3, 'a', 'b', 'c']
外部的a是: [1, 2, 3, 'a', 'b', 'c']
赋值(=)是给他新建了一个数据地址,修改(append)/(+=)是在原基础上进行修改。
当我们的参数接收到的是一个不可变数据类型,比如整数,字符串,元组。
那么在函数内部,不管你使用赋值语句 = 或者说 += 也都无法修改原址的内容,
不可变对象,你只能是给他重新赋值。
为了解决 C/C++ 指针,引用
传递一个可变对象,比如列表,如果我们内部使用了赋值语句 = ,那么是给这个函数内部的局部变量一块新地址
如果我们修改了这个传递进来的可变数据对象,那么就是修改了其原址的值
+= 和 = 在函数内部对一个可变数据对象的操作影响到的结果是不一样的
传值
传值就是传递了一个不可变数据对象,那么在函数内部做修改不会影响到外部的数据
传引用
传引用就是实参传递了可变数据对象,这样我们在函数内部就可以直接修改原址的值
你们写了一个功能函数,在传递参数的时候,一定要注意,传进来的是可变还是不可变数据对象,
传了一个列表进来,那么你就不能直接对他进行修改
函数嵌套:
内部函数整个函数体都在外部函数的作用域,如果在外部没有对这个函数的引用,那么除了在函数体内,任何地方都不能调用这个函数,
匿名函数:(lambda表达式)
lambda 参数1,参数2,参数3,参数N:表达式
默认参数也可以在lambda中使用
f = lambda x,y=1:x+y
lambda 通常用来编写跳转表(jump table) 也就是行为的列表或字典,能够按照需要执行相应的动作,比如说
L = [lambda x:x*2 ,
lambda x:x*3,
lambda x:x*4
]