python-函数

一、函数

1、函数的本质

函数的本质就是对功能的封装

2、优点

1)简化代码结构,增加了代码的复用度
2)如果想修改某个功能或者调试某个BUG,还需要修改对应的函数即可

3、定义函数

格式:

def 函数名(函数列表):
	语句
	return 表达式

def:函数代码块以def关键字开始
函数名称:遵循标识符规则
参数列表:(参数1,参数2,…,参数n):任何传入函数的参数和变量必须放在圆括号之间,用逗号分隔。函数从函数的调用者哪里获取的信息
冒号:函数内容(封装的功能)以冒号开始,并且缩进
语句:函数封装的功能
return:一般用于结束函数,并返回信息给函数的调用者
表达式:即为要返回黑给函数的调用者的信息

注意:最后的return表达式可以不写,相当于return None

4、函数的调用

格式:
函数名(参数列表)

函数名:要使用的的功能的函数的名称
参数列表:函数的调用者给函数传递的信息

5、函数的参数

1)形参

定义函数时,小括号中的变量,本质是变量,参数必须按照顺序传递,个数要对应

def myPrint(str,age):
	print(str,age)

2)实参

调用函数时给函数传递的数据,本质是值
值传递:传递的不可变类型
string,tuple,number是不可变的

myPrint("haha is a test girl",15)
def func1(num):
	num = 10

temp = 20
func1(temp)
print(temp)

20

3)引用传递

传递的可变类型
list、dict、set是可变的

4)关键字参数

允许函数调用时参数的顺序与定义时的不一致

def myPrint(str,age):
	print(str,age)

myPrint(age = 18,str = "haha is a test girl")

haha is a test girl 18

5)默认参数

调用函数时,如果没有传递参数,则使用默认的参数

def myPrint(str,age = 18):
	print(str,age)
myPrint("haha")

haha 18

要用默认参数,最好将默认参数放到最后

6)不定长参数

#加了星号(*)的变量存放所有未命名的变量参数,如果在函数调用时没有指定参数,它就是一个空元组

def func(name,*arr):
	print(name)
	print(type(arr))
	for x in arr:
		print(x)
func("hah","is","test","a","good","girl")

hah
<class 'tuple'>
is
test
a
good
girl
def mySum(*l):
	sum = 0
	for i in l:
		sum += i
	return sum
print(mySum(1,2,3,4,5))

15

**代表键值对的参数字典,和*所代表的意义类似

def func2(**kwargs):
		print(kwargs)
		print(type(kwargs))

fun2c(x=1, y=2, z=3)

{'x': 1, 'y': 2, 'z': 3}
<class 'dict'>
def func3(*args, **kwargs):
	pass # 代表 一个空语句

6、匿名函数

概念:不使用def这样的语句来定义函数,使用lambda来创建匿名函数
特点
1)lambda只是一个表达式,函数体比def简单
2)lambda的主体是一个表达式,而不是代码块,仅仅只能在lambda表达式中封装简单的逻辑
3)lambda函数有自己的命名空间,且不能访问自有参数之外的或全局命名空间的参数
4)虽然lambda是一个表达式且看起来只能写一行,与C和C++的内联函数不同

格式

lambda 参数1,参数2,......,参数n:expression
sum = lambda num1,num2:num1+num2
print(sum(1,2))

3

二、装饰器

是一个闭包,把一个函数当做参数返回一个替代版的函数,本质上是一个返回函数的函数

1.简单的装饰器

def func1():
	print("hah is a test girl")
def outer():
	print("**************")
	func1()
outer()

**************
hah is a test girl
def say(age):
    print("hah is %d test girl" % (age))


def outer(func):
    def inner(age):
        if age < 0:
            age = 0
        func()
    return inner


say = outer(say)   (或者是使用:@outer)
say(-10)

hah is 0 test girl

2.通用装饰器

def say(age):
	print("haha is %d years old" % (age))
def outer(func):
	def inner(*args, **kwargs):
		print("&&&&&&&&&&&&&&&")
		func(*aegs, **kwargs)
	return inner
@outer
def say(name, age):
	print("my name is %s, I am %d years old" % (name,age))
say("haha", 18)


&&&&&&&&&&&&&&&
my name is haha, I am 18 years old

备注:函数的参数理论上可以是无限制的,但是实际上最好不要超过6,7个

三、偏函数

def int2(str,base = 2):
	return int(str,base)
print(int2("1011"))

11   #以二进制形式打印

把一个参数固定住,形成一个新的函数

import functools
int3 = functools.partial(int,base = 2)
print(int3("111"))

7

四、变量的作用域

1.作用域:

变量可以使用的范围
程序的变量并不是所有位置都能使用的,访问的权限决定于变量在哪里赋值的

2.类型:

局部作用域
全局作用域
内建作用域

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值