python-函数

函数的定义和调用:

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

]

 

 

 

 

原文地址:https://www.cnblogs.com/askDing/p/8525333.html