python函数进阶

函数参数类型

不可变类型参数:整数、字符串、元组。 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。 可变类型:列表,字典。如 fun(la), 则是将 la 真正的传过去,修改后 fun 外部的 la 也会受影响

  • 传递不可变类型参数,不会影响参数本身。
  • 传递可变类型参数,会影响参数本身。
def func1(name,names = []):
    names.append(name)
    print(a)
func1('Tom')
func1('Jack')

命名空间

  • 概述
    • 命名空间指的是保存程序中的变量名和值的地方。命名空间的本质是一个字典, 用来记录变量名称和值。字典的 key 是变量的名称,字典的 value 对于的是变量 的值。 例如 {‘name’:’zs’,’age’:10}
  • 分类
    • 局部
      每个函数都有自己的命名空间,叫做局部空间,它记录了函数的变量,包括函数 的参数 和局部定义的变量
    • 全局
      每个模块拥有它自已的命名空间,叫做全局命名空间,它记录了模块的变量,包 括函数、 类、其它导入的模块。
    • 内置
      任何模块均可访问它,它存放着内置的函数和异常。 input,print,str,list,tup
  • 命名空间的访问
    • locals
    • global
  • 命名空间的加载顺序
    内置命名空间(程序运行前加载)->全局命名空间(当程序运行的时候加载全局命 名空间)->局部命名空间(程序运行中:函数被调用时才加载)当函数返回结果 或 抛出异常时,被删除。每一个递归调用的函数都拥有自己的命名空间
  • 命名空间的查找顺序
    局部->全局->内置

作用域

  • LEGB
  • 注意: 在 python 中,模块(module),类(class)、函数(def、lambda)会产生新的 作用域,其他代码块是不会产生作用域的,也就是说,类似条件判断(if……else)、 循环语句(for x in data)、异常捕捉(try…catch)等的变量是可以全局使用的
for i in range(10):
    print(i)
#循环结束后,依旧可以使用i
print(i)

全局变量与局部变量

  • 概念
    • 全局定义在函数外
    • 局部定义在函数内
  • 区别
    • 定义位置不同
    • 作用于不同
      • 全局作用域为全局
      • 局部作用域仅限于当前函数内
    • 生命周期不同
      • 全局变量的生命周期为程序周期结束
      • 局部变量的生命周期为函数作用结束
    • 内存区域不同
      • 全局存储的内存在区域不在栈中
      • 局部存储的内存区域在栈上
  • 在函数中访问全局变量
  • 在函数中修改全局变量
    • 不可变类型的全局变量(global的使用)
    • 可变类型的全局变量

内置函数

  • 查看内置函数
import builtins
print(dir(builtins))
  • abs()函数
    • 求数字的绝对值
ret = abs(-21)
print(ret)
  • max()函数
    (1)简单使用 max()
    (2)使用 key 关键字
  • map()函数
    有两个参数,第一个参数是一个函数,第二个参数是可迭代的内容。 函数会依次作用在可迭代内容的每一个元素上进行计算,然后返回一个新的可迭 代内容
    • 求 lst 中每一个元素的平方值
    • 求两个列表对应位置元素的和
  • filter() 函数
    函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成 的新列表
def func2(x):
    return x % 2 == 0
l = filter(func2,[1,2,3,4,5])
print(type(l))
for a in l:
    print(a)
  • zip()函数
    • zip 函数接受任意多个可迭代对象作为参数,将对象中对应的元素打包成一个 tuple, 然后返回一个可迭代的 zip 对象.这个可迭代对象可以使用循环的方式列出其元 素 若多个可迭代对象的长度不一致,则所返回的列表与长度最短的可迭代对象相 同
    • 使用示例:
str1 = 'abc'
str2 = '1234'
ret = zip(str1,str2)
for i in ret:
    print(i)

匿名函数

  • 定义
    • 变量名= lambda 参数:表达式(block)
    • 参数:可选,通常以逗号分隔的变量表达式形式,也就是位置参数 表达式:不能包含循环、return,可以包含 if…else…
  • 使用
    • max(key=lambda)
    • sort(key=lambda)
  • 注意:
    • 表达式中不能包含 循环,return
    • 可以包含 if…else…语句(三元条件表达式).
    • 表达式计算的结果直接返回
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python函数是指一些高级特性和用法,它们可以一步提高代码的复用性、可读性和效率。以下是一些常见的Python函数及其用法: 1. 匿名函数(lambda函数):使用lambda关键字定义的匿名函数可以简洁地定义一些简单的函数。例如,lambda x: x**2表示一个接受参数x并返回x的平方的匿名函数。 2. map()函数:map()函数用于将一个函数应用到一个可迭代对象的每个元素上,并返回一个新的可迭代对象。例如,map(lambda x: x**2, [1, 2, 3, 4])将返回一个包含每个元素平方值的列表。 3. filter()函数:filter()函数用于根据指定条件过滤可迭代对象中的元素,并返回一个新的可迭代对象。例如,filter(lambda x: x > 0, [-1, 0, 1, 2])将返回一个包含大于0的元素的列表。 4. reduce()函数:reduce()函数用于对可迭代对象中的元素行累积操作,并返回一个结果。需要先从`functools`模块导入。例如,reduce(lambda x, y: x+y, [1, 2, 3, 4])将返回10,表示1+2+3+4。 5. zip()函数:zip()函数用于将多个可迭代对象的对应元素打包成元组,然后返回一个新的可迭代对象。例如,zip([1, 2, 3], ['a', 'b', 'c'])将返回[(1, 'a'), (2, 'b'), (3, 'c')]。 6. enumerate()函数:enumerate()函数用于为可迭代对象中的元素添加索引,并返回一个新的可迭代对象。例如,enumerate(['a', 'b', 'c'])将返回[(0, 'a'), (1, 'b'), (2, 'c')]。 7. sorted()函数:sorted()函数用于对可迭代对象行排序,并返回一个新的列表。例如,sorted([3, 1, 2])将返回[1, 2, 3]。 8. any()和all()函数:any()函数用于判断可迭代对象中是否存在至少一个为真的元素;all()函数用于判断可迭代对象中的所有元素是否都为真。例如,any([True, False, True])将返回True,而all([True, False, True])将返回False。 这些是Python函数的一些例子,它们可以帮助你更高效地编写代码,增加代码的灵活性和可读性。当然,还有很多其他的函数和技巧可以在Python文档和其他教程中学习到。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值