人工智能系列-Python系列(五)函数详解

转载请注明预见才能遇见的博客:http://my.csdn.net/

原文地址:https://blog.csdn.net/pcaxb/article/details/91980353

人工智能系列-Python系列(五)函数详解

目录

人工智能系列-Python系列(五)函数详解

1.函数的定义

2.函数的使用

3.函数的返回值

4.参数

1)形参和实参

2)位置参数和关键字参数

5.参数组 *列表  **字典

1)单个测试

2)组合测试

5.全局变量和局部变量

6.全局变量变量名大写,局部变量变量名小写

 7.nonlocal,指定上一级变量,如果没有就继续往上直到找到为止

8.前向引用,函数即变量

9.递归:在函数内部,可以调用其他函数。如果在调用一个函数的过程中直接或间接调用自身本身

10.函数作用域

11.匿名函数

12.函数式编程

13.map(处理逻辑,可迭代对象) 对可迭代对象做处理

14.filter 过滤 filter(处理逻辑,可迭代对象) 如果处理逻辑是true就是保留下来

15.reduce

16.内置函数

1).zip

 2).max min


1.函数的定义

# 函数:函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。

# 过程:就是没有返回值的函数
# 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
# 面向对象:对函数进行分类和封装,让开发“更快更好更强...”
# 面向过程编程:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制

2.函数的使用

# def 函数名(参数):
#     ...
#     函数体
#     ...
#     返回值
# 函数的定义主要有如下要点:
# def:表示函数的关键字
# 函数名:函数的名称,日后根据函数名调用函数
# 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
# 参数:为函数体提供数据
# 返回值:当函数执行完毕后,可以给调用者返回数据。

3.函数的返回值

# 1)0 没有返回值,就是返回None
# 2)1 返回的就是对象
# 3)>1 返回的就是元组

4.参数

1)形参和实参

 name 叫做函数func的形式参数,简称:形参、不占内存 

# def func(name):
#     print name

#  'wupeiqi' 叫做函数func的实际参数,简称:实参
# func('wupeiqi')

2)位置参数和关键字参数

# def test(x,y,z):#x=1,y=2,z=3
#     print(x)
#     print(y)
#     print(z)

# 位置参数,必须一一对应,缺一不行多一也不行
# test(1,2,3)

# 关键字参数,无须一一对应,缺一不行多一也不行
# test(y=1,x=3,z=4)

# 位置参数必须在关键字参数左边
# test(1,y=2,3)#报错
# test(1,3,y=2)#报错
# test(1,3,z=2)
# test(1,3,z=2,y=4)#报错
# test(z=2,1,3)#报错

# 默认值参数
# def test(x, y=2):
#     print(x, y)
#
# test(1)  # 1 2
# test(1, 3)  # 1 3
# test(x=3, y=5)  # 3 5
# test(3, y=8)  # 3 8
# test(x=3,8) # 错误

5.参数组 *列表  **字典

1)单个测试

# def test01(x, *args):
#     print(x, args)
#
# test01(1)  # 1 ()
# test01(1, 2)  # 1 (2,)
# test01(1, 2, 4, 4, 5, 5, 6)  # 1 (2, 4, 4, 5, 5, 6)
# test01(1, {"name": "pca"})  # 1 ({'name': 'pca'},)
# test01(1, [1, 2, 4])  # 1 ([1, 2, 4],)
# test01(1, *[1, 1, 2, 2])  # 1 (1, 1, 2, 2)
# test01(1, *(1, 2, 4))  # 1 (1, 2, 4)
# # test01(1,y=2,z=3) # 错误

# def test02(x, **kwags):
#     print(x, kwags)
#
# test02(1,y=2,z=3)  # 1 {'y': 2, 'z': 3}
# # test02(1,y=2,z=3,z=3)#会报错 :一个参数不能传两个值
# # test02(1,1,1,1,y=2,z=3)#会报错

2)组合测试

# def test03(x,*args,**kwargs):
#     print(x)
#     print(args,args[-1])
#     print(kwargs,kwargs.get('y'))
# test03(1,1,2,1,1,11,1,x=1,y=2,z=3) #报错
# test03(1,1,2,1,1,11,1,y=2,z=3)

# test03(1,*[1,2,3],**{'y':1})

5.全局变量和局部变量

# 在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
# 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
# 当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
# name = "lili"
# # def pn():
# #     global name  # 这样可以吧name变成全局的,global一定要放到对应变量上面,推荐所有的global都放到函数顶部
# #     name = 111  # 加了global 之后,这里修改的就是全局的
# #     print(name)  # 111
# # # print(name) #lili
# # print(name)  # 111
# # pn()

6.全局变量变量名大写,局部变量变量名小写

 7.nonlocal,指定上一级变量,如果没有就继续往上直到找到为止

# name = "11"
# def weihou():
#     name = "22"
#     def weiweihou():
#         nonlocal name  # nonlocal,指定上一级变量,如果没有就继续往上直到找到为止
#         name = "33"
#     weiweihou()
#     print(name)
# print(name)
# weihou()
# print(name)
# 11
# 33
# 11

8.前向引用,函数即变量

9.递归:在函数内部,可以调用其他函数。如果在调用一个函数的过程中直接或间接调用自身本身

# 递归特性:
# 1). 必须有一个明确的结束条件,函数的终止使用return
# 2). 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
# 3). 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,
# 每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,
# 所以,递归调用的次数过多,会导致栈溢出)
# def calc(n):
#     # print(n)
#     if int(n / 2) == 0:
#         return n
#     res = calc(int(n / 2))
#     return res
#
#
# res = calc(10)
# print(res)

# import time
# def sleep1(x):
#     time.sleep(1)
#     print(x)
#     x -= 1
#     if x >= 0:
#         sleep1(x)
# sleep1(10)

10.函数作用域

# 函数的作用域只跟函数声明时定义的作用域有关,跟函数的调用位置无任何关系
# name = 'alex'
# def foo():
#     name = 'linhaifeng'
#     def bar():
#         # name='wupeiqi'
#         print(name)
#     return bar
# a = foo()
# print(a)
# a()  # bar()  linhaifeng
#
# foo()()  # linhaifeng

11.匿名函数

# lambda x: x + 1
#
# func = lambda x, y, z: x + y + z
# print(func(1, 2, 3))  # 6

12.函数式编程

# 编程的方法:面向过程,函数式,面向对象
# 面向过程:
# 函数式:数学意义的函数 + 编程语言定义的函数

# 高阶函数 (满足下面一个条件就是高阶函数)
# 1)把函数当作参数传给另外一个函数
# 2)返回值中包含函数

13.map(处理逻辑,可迭代对象) 对可迭代对象做处理

# msg = 'linhaifeng'
# print(list(map(lambda x: x.upper(), msg)))  # ['L', 'I', 'N', 'H', 'A', 'I', 'F', 'E', 'N', 'G']
#
# arr01 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# print(list(map(lambda x: x * 10, arr01)))  # [10, 20, 30, 40, 50, 60, 70, 80, 90]

14.filter 过滤 filter(处理逻辑,可迭代对象) 如果处理逻辑是true就是保留下来

# movie_people = ['alex', 'wupeiqi', 'yuanhao', 'sb_alex', 'sb_wupeiqi', 'sb_yuanhaosb']
# print(list(filter(lambda n: n.endswith('sb'), movie_people)))  # ['sb_yuanhaosb']
# print(list(
#     filter(lambda n: not n.endswith('sb'), movie_people)))  
# # ['alex', 'wupeiqi', 'yuanhao', 'sb_alex', 'sb_wupeiqi']

15.reduce

# from functools import reduce
# num_l = [1, 2, 3, 100]
# print(reduce(lambda x, y: x + y, num_l, 1))  # 107
# print(reduce(lambda x, y: x + y, num_l))  # 106
#
# print(reduce(lambda x, y: x * y, num_l, 1)) # 600
#  1*1 * 2 * 3 * 100 = 600 默认值是1,然后默认值 * 可迭代对象的第一个值,然后结果 * 第二个值,然后结果 * 第三个值

16.内置函数

 

# 序列:列表、元组、字符串
# 参考资料:
# https://docs.python.org/zh-cn/3/library/functions.html
# https://www.cnblogs.com/xiao1/p/5856890.html
# https://www.cnblogs.com/linux-chenyang/p/6473820.html

1).zip

# person = {'name': 'pca', 'age': 123}
# zipRes = zip(person.keys(), person.values())
# print(list(zipRes))  # [('name', 'pca'), ('age', 123)]

 2).max min

# 说明:不同类型之间不能比较
# nums = [1, 3, 100, -1, 2]
# print(max(nums))  # 100
# print(min(nums))  # -1

age_dic = {'alex_age': 18, 'wupei_age': 20, 'zsc_age': 100, 'lhf_age': 30}
print(max(age_dic.values()))  # 100
print(max(age_dic.keys()))  # zsc_age

 # 需求:取出key和value

print(list(zip(age_dic.values(), age_dic.keys())))
# [(18, 'alex_age'), (20, 'wupei_age'), (100, 'zsc_age'), (30, 'lhf_age')]
print(max(zip(age_dic.values(), age_dic.keys())))  # (100, 'zsc_age')
# 需求:取出age最大的那个对象
people = [
    {'name': 'alex', 'age': 1000},
    {'name': 'wupei', 'age': 10000},
    {'name': 'yuanhao', 'age': 9000},
    {'name': 'linhaifeng', 'age': 18},
]
# 通过取出某个属性去比较
print(max(people, key=lambda p: p['age']))  # {'name': 'wupei', 'age': 10000}
参考资料:https://www.cnblogs.com/linhaifeng/articles/6113086.html

人工智能系列-Python系列(五)函数详解

博客地址:https://blog.csdn.net/pcaxb/article/details/91980353

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值