Python 函数(二)

原创 2018年04月16日 23:36:33


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()


               

欢迎关注小婷儿的博客:https://blog.csdn.net/u010986753

有问题请在博客下留言或加QQ群:483766429 或联系作者本人 QQ 87605025

OCP培训说明连接:https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA

OCM培训说明连接:https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA


小婷儿的python正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。

小婷儿的python正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。

小婷儿的python正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。

重要的事说三遍。。。。。。



版权声明: https://blog.csdn.net/u010986753/article/details/79968455

Python初入门(三)(Head First Python 第三章 文件与异常)

文件与异常
  • ahaha413525642
  • ahaha413525642
  • 2017-07-29 13:30:21
  • 203

python求范数

import numpy as npa=np.array([[complex(1,-1),3],[2,complex(1,1)]])  print(a)print("矩阵2的范数")print(np....
  • momaojia
  • momaojia
  • 2017-03-24 19:47:40
  • 1680

python学习笔记:二维数组排序问题

菜鸟再来发帖: 首先先说一下题目:有一个文件,文件目录及名称:d:\\test1.txt 文件内容: 0001 Jone 1000.00 0002 Stone 30000.00 0008 S...
  • tolcf
  • tolcf
  • 2012-04-04 21:18:10
  • 7041

【python学习笔记】python2.x与python3.x版本中zip函数的不同

Python版本3.3有zip这个用法吗? 按理来说,这个code是没错的,会return出[(0,3),(1,1),(2,4)]的结果,但是最后一行那是什么?谁能解释一下? ...
  • u012509485
  • u012509485
  • 2017-10-11 15:02:34
  • 169

Python下opencv的使用---二值化

图像的阈值处理一般使得图像的像素值更单一、图像更简单。阈值可以分为全局性质的阈值,也可以分为局部性质的阈值,可以是单阈值的也可以是多阈值的。当然阈值越多是越复杂的。下面将介绍opencv下的三种阈值方...
  • jjddss
  • jjddss
  • 2017-06-02 09:26:51
  • 2732

Python下利用PIL实现可设定阈值的二值图像转换

这些日子作些图像处理的工作,正好有机会试试很久以前就学过的Python,结果很让自己惊讶,比我原本最乐观的想像还要好用的多。当然,首先要感谢“恋花蝶”,是他的文章“用Python做图像处理 ” 帮我...
  • Vange
  • Vange
  • 2010-03-19 11:35:00
  • 15455

第12课 Python中if分支语句表达式结构

1.表达式 表达式,是由数字、算符、数字分组符号括号、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合,故表示通常是由操作数和操作符两部分组成,如果操作符前后均有操作数,我们称此类操作符是...
  • nupotian
  • nupotian
  • 2017-01-12 15:15:58
  • 283

在Python下利用PIL实现可设定阈值的二值图像转换

  • rickArkin
  • rickArkin
  • 2007-12-05 21:54:00
  • 6935

python 二分叉查找

  • 2015年11月01日 21:54
  • 521B
  • 下载

python opencv 图像二值化并显示

#!/usr/bin/python from urllib import * import cv2 import io imgStr = urlopen("http://www.btbu.edu.c...
  • ypwhs
  • ypwhs
  • 2015-01-19 23:14:16
  • 3471
收藏助手
不良信息举报
您举报文章:Python 函数(二)
举报原因:
原因补充:

(最多只允许输入30个字)