"""
创建函数 函数名([形参1,形参2,形参n])
代码块
函数名必须要符合标识符的规范
(可以包含字母,数字,下划线,但是不能以数字开头)
函数中保存的代码不会立刻执行,需要调用函数代码才会执行
函数中的参数
在定义函数时,可以在函数名后面的()中定义数量不等的形参
多个形参用逗号隔开
形参(形式参数)定义形参就相当于在函数内部声明了变量,但是并不赋值
实参:将会赋值给对应的形参,偶几个形参就传几个形参
关键字参数
关键字参数,可以不按照形参定义的顺序去传递,而是直接根据参数名去传递参数
"""
# def fn(a,b):
# print(a+b)
# fn(10,20)
#
# def sc(a,b,c):
# print(a*b*c)
# sc(10,2,30)
"""
不定长参数
定义一个函数,可以求任意数字的和
#定义一个变量,来保存结果
"""
"""
返回值,返回值就是函数执行以后返回的结果
可以通过return来指定函数的返回值
可以直接使用函数的返回值,也可以通过变量来接收函数的返回值
return 后面跟什么值,函数就会返回什么值
return后面可以跟任意的对象,返回值甚至可以是一个函数
如果仅仅写一个return 或者不写return ,则相当于return None
在函数中,return后的代码都不会执行,return一旦执行函数自动结束
break:用来退出当次循环
continue:用来跳过当次循环
reture 用来结束函数
"""
# def sum(*nums):
# result = 0
# for n in nums:
# result+=n
# print(result)
# sum(100,22,44,5,6,7,55,41)
# def fn():
# return 10
# #fn和fn()的区别
# print(fn) #fn是函数对象,打印fn实际是在打印函数对象<function fn at 0x000001DA5956D8B8>
# print(fn()) #fn()是在调用函数,打印fn()实际上在打印fn()函数返回值10
"""
help()是python中的内置函数
通过help()函数可以查询python中的函数的用法
语法:help(函数对象)
"""
"""
递归式函数:在函数中自己调用自己
无穷递归:如果这个函数被调用,程序就会内存溢出,类似于死循环
递归函数的两个要点
1:基线条件:
问题可以被分解为最小问题,当满足基线条件时,递归就不执行了
2:递归条件:
将问题继续分解的条件
"""
#递归案例
# def hui_wen(s):
# if len(s) <2:
# return True
# elif s[0]!=s[-1]:
# return False
#
# return hui_wen(s[1:-1])
# print(hui_wen('ABCDEFGFEDCBA'))
"""
函数式编程
在python中,函数是一等对象
一等对象一般具有以下几个特点
1、对象是在运行时创建的
2、能赋值给变量或作为数据结构中的元素
3、能作为参数传递
4、能作为返回值返回
高阶函数
高阶函数至少要符合以下两个特点中的一个
1、接收一个或者多个函数作为参数
2、将函数作为返回值返回
"""
# l=[1,2,3,4,5,6,7,8,9]
# def fn(lst):
# new_list=[]
# for n in lst:
# if n%2==0:
# new_list.append(n)
# return new_list
# print(fn(l))
"""
map()函数可以对可迭代对象中的所有元素做指定的操作,然后将其添加到一个新的对象中返回
"""
# l=[1,2,3,4,5,6,7,8,9]
# r=map(lambda i:i**2 ,l)
# print(list(r))
"""
sort()
该方法用来对列表中的元素进行排序
sort()方法默认是直接比较列表中的元素大小
在sort()可以接受一个关键字参数,key
key需要一个函数作为一个参数,当设置了函数作为参数
每次调用都会以列表中的一个参数作为参数来调用函数,并且使用函数的返回值来比较元素的大小
"""
# l=['bbbbb','aaaaaaa','h','lllllllll','iiiiiii']
# l.sort()
# print(l)
"""
sorted()
这个函数和sort()的用法基本一致,但是sorted可以对任意的序列进行排序
并且使用sort()排序不会影响原来的对象,而是返回一个新对象
"""
# l=[1,5,4,6,7,0,3,4]
# print("排序前",l)
# print(sorted(l, key=int))
# print("排序后",l)
"""
闭包
形成闭包的条件
1、函数嵌套
2、将内部的函数作为返回值返回
3、内部函数必须要使用到外部函数的变量
"""
# def make_avg():
# #创建一个列表,用来保存数值
# nums=[]
# #创建一个函数,用来计算平均值
# def avg(n):
# #将n添加到列表中
# nums.append(n)
# #求平均值
# return sum(nums)/len(nums)
# return avg
# avg=make_avg()
#
# print(avg(10))
# print(avg(20))
"""
装饰器的使用
"""
def add(a,b):
"""
求任意两个数的和
"""
r=a+b
return r
add(10,20)
def mul(a,b):
"""
求任意两个数的积
"""
r=a*b
return r
mul(10,45)
def begin_end(old):
"""
用来对其他函数进行扩展,使其他函数可在执行打印开始之前执行,执行后打印执行语句
参数:old
"""
#创建一个新函数
def new_function(*args,**kwargs):
print("开始执行。。。。。")
result=old(*args,**kwargs)
print("执行结束。。。。。")
#返回函数的执行结果
return result
#返回新函数
return new_function
f=begin_end(add)
f2=begin_end(mul)
@begin_end
def say_hello():
print("大家好")
say_hello()