前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 函数(二)

Python 函数(二)

作者头像
AiDBA宝典
发布2022-02-23 14:48:25
1710
发布2022-02-23 14:48:25
举报
文章被收录于专栏:小麦苗的DB宝专栏

今天小婷儿给大家分享的是Python 函数(二)。

Python 函数(二)

Python 3 函数(匿名函数、偏函数 and 变量作用域:全局变量、局部变量)

一、匿名函数:没有名字,也不再使用 def 语句这样标准的形式定义的一个函数。

1、python 3 使用 lambda 来创建匿名函数,; 2、lambda 只是一个表达式,函数体比 def 简单; 3、lambda的主体是一个表达式,而不是一个代码块,仅能封装有限的逻辑进去; 4、lambda 函数拥有自己的命名空间,不能访问自己参数列表之外或全局命名空间里的参数; 5、lambda 函数的语法只包含一个语句,如下: lambda [arg1 [,arg2,.....argn]]:expression

例一:

sum = lambda var1, var2: var1 + var2; print ("var1 + var2 的值为 : ", sum( 10, 20 )) print ("var1 + var2 的值为 : ", sum( 20, 20 )) Python 3 结果:30 Python 3 结果:40

例二:

add = lambda x: x + 2 print(add(10)) Python 3 结果:12

例三 (函数可以作为另外一个函数的参数):

def calcute(a, b, func): v = func(a, b) return v v = calcute(9, 3, lambda x, y : x / y) print(v) Python 3 结果:3.0

例四 (key 可以指定根据什么条件进行排序):

l = [(3, 12), (6, 23), (4, 20)] l.sort(key=lambda x:x[1], reverse=True) print(l) Python 3 结果:[(6, 23), (4, 20), (3, 12)]

例五(key 可以指定根据什么条件进行排序):

l = [{'name':'To', 'age':10}, {'name':'Je', 'age':9}, {'name':'Ja', 'age':20}, {'name':'Ro', 'age':19}] l.sort(key=lambda x:x['age']) print(l) Python 3 结果:[{'name': 'Je', 'age': 9}, {'name': 'To', 'age': 10}, {'name': 'Ro', 'age': 19}, {'name': 'Ja', 'age': 20}]

二、偏函数:相当于给函数设置默认参数

注:对于有很多可调用对象,并且许多调用都反复使用相同参数的情况,使用偏函数比较合适。

例一:

import functools def add(a, b): return a + b func = functools.partial(add, b=3) print(func(10)) Python 3 结果:13

三、变量作用域:变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。

1、Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。 2、Python的作用域一共有4种,分别是: L (Local) 局部作用域; E (Enclosing) 闭包函数外的函数中; G (Global) 全局作用域; B (Built-in) 内建作用域; 以 L –> E –> G –>B 的规则查找; 即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。

例一:

total = 0; # 这是一个全局变量 # 可写函数说明 def sum( arg1, arg2 ): #返回2个参数的和." total = arg1 + arg2; # total在这里是局部变量. print ("函数内是局部变量 : ", total) return total; #调用sum函数 sum( 10, 20 ); print ("函数外是全局变量 : ", total) Python 3 结果:30 Python 3 结果:0

例二(在函数中可以直接访问全局变量):

a = 10 #全局变量 def test(): global a # 需要使用 global 关键字声明 a = 20 print(a) #在函数中可以直接访问全局变量 test() print(a) Python 3 结果:20 Python 3 结果:20

例三:

def test1(): a = 30 #局部变量,和全局变量的a不是同一个变量 print(a) test1() print(a) Python 3 结果:30 Python 3 结果:20

例四:函数中的参数也相当于函数的局部变量

x = 10 y = 'a' def swap(): global x global y temp = x x = y y = temp swap() print(x, y) Python 3 结果:a 10

例五:在函数中,可以修改全局的可变对象的内容

def test2(a, b): if a > b: x = 10 print(x) test2(10, 2) Python 3 结果:10

例六:

l = [1, 2, 3, 4] def test3(): l[0] = 10 test3() print(l) Python 3 结果:[10, 2, 3, 4]

例七:

num = 1 def fun1(): global num # 需要使用 global 关键字声明 print(num) num = 123 print(num) fun1() Python 3 结果:1 Python 3 结果:123

例八:

def outer(): num = 2 def inner(): nonlocal num # nonlocal关键字声明 num = 6 print(num) inner() print(num) outer() Python 3 结果:6 Python 3 结果:6 例九:以下程序执行,会报错:UnboundLocalError: local variable 'a' referenced before assignment a = 10 def test(): a = a + 1 print(a) test()

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python 3 函数(匿名函数、偏函数 and 变量作用域:全局变量、局部变量)
    • 一、匿名函数:没有名字,也不再使用 def 语句这样标准的形式定义的一个函数。
      • 二、偏函数:相当于给函数设置默认参数
        • 三、变量作用域:变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档