内置函数,变量的作用域,闭包及递归

##内置函数

bin()转换为二进制
oct()转换为八进制
hex()转换为十六进制

ord('a')    #将字符转换为对应的ASCII码
97

chr(65)     #将ASCII码值转化为对应的字符    
'A'

sum([1,2,3])
6

sum([1,2,3],2)
8

二、补充几个内置函数

  1、enumerate() 返回一个枚举对象 传参时放一个可迭代参数,返回一个枚举对象,输入list(enumerate())

enumerate([1,2,3])
<enumerate object at 0x01730FD0>   返回一个枚举对象

list (enumerate([1,2,3]))    #前面返回的是索引,后面返回列表值
[(0, 1), (1, 2), (2, 3)]


可以自定义初始索引
list (enumerate([1,2,3],3))
[(3, 1), (4, 2), (5, 3)]

dict(enumerate(['a','b','c']))
{0: 'a', 1: 'b', 2: 'c'}

dict(enumerate(['a','b','c'],2))
{2: 'a', 3: 'b', 4: 'c'}

dict(enumerate([4,5,6],2))
{2: 4, 3: 5, 4: 6}                      #总结:返回一个枚举对象,(索引,值)索引可以自己定义,还可以变成字典形式

 

filter 过滤器     function表示函数

用来筛选,类似漏斗,传参时前面放入function or None ,后面放入可迭代对象

结果返回一个过滤对象,需要通过list dict 等转化为结果

help(filter)
filter(function or None, iterable) --> filter object

filter(None,[1,2,3])
<filter object at 0x0133A530>

list(filter(None,[1,2,3]))
[1, 2, 3]

def guolv(a):
    return a>1

list(filter(guolv,[1,2,3]))
[2, 3]

 list(filter(lambda x: x>1,[1,2,3]))
[2, 3]  #条件为x>1 ,筛选出x>1的对象
返回一个过滤对象 输出[2,3]

总结:第一个参数是给定一个过滤的函数当参数,过滤所需要的可迭代对象。

 

map 全体加工

对于每个对象进行函数加工,返回一个map对象,前面放入一个function

后面放入一个可迭代对象*iterable(将可迭代对象解包)

map(None,[1,2,3,4])
<map object at 0x01742470>

list(map(lambda x:x+1,[1,2,3,4]))
[2, 3, 4, 5]

list(map(lambda x:x>1,[1,2,3,4]))
[False, True, True, True]

list(map(str,[1,2,3,4]))
['1', '2', '3', '4']


总结:给定一个加工的函数当参数,过滤可迭代对象

 

zip 匹配

将一个个可迭代对象一一配对,返回一个zip对象,可输入多个可迭代对象

zip([1,2,3])
<zip object at 0x010F09B8>

list(zip([1,2,3]))    ##也是一一配对,不过是假装你有对象
[(1,), (2,), (3,)]

list(zip([1,2,3],['a','b','c']))
[(1, 'a'), (2, 'b'), (3, 'c')]

总结:将对象一一配对

 

 

变量的作用域,闭包及递归

局部变量:变量在函数的内部定义,则变量的作用域在函数内部

全局变量:变量在函数外部定义的,则变量的作用域是全局

 

x=1    #全局变量
def fun():
    y=2    #局部变量,局部变量不能修改全局变量
    print(x,y)

fun()
1 2


x=1
def fun():
    y=2
    global x #授权的意思,声明为全局变量
    x+=1
    print(x,y)
    
fun()
2,2



x=1
def fun():
    global y
    y=2
    global x
    x+=1
    print(x,y)
    

fun()
2 2 

 global:用来在函数或其他局部作用域中,声明全局变量,(作用于全局)

使用global情况:全局变量可以在内部访问,但是不能改变

如果在函数内部,想修改全局变量,可以用golbal来修饰变量

局部变量只能在局部进行访问和修改,如果在函数外部,想访问局部变量,也可以用global,将局部变量声明为全局变量

a=10
def f1():
    global a
    a+=1
    print(a)
    
f1()
11

def f2():
    global a
    a=1
    print(a)

    
f2()
1

nonlocal:用来在函数或其他作用域中,声明外层(非全局变量)作用于局部

事业nonlocal情况:当里层局部需要修改外层局部时,需要使用nonlocal(如嵌套函数)

 

def fun2():
    q=1
    print('局部外层',q)        输出局部外层q
    def fun3():
        w=22
        nonlocal q          #nonlocal当局部里层想修改局部外层时,声明下q
        q+=1
        print(q)
        print('局部里层',w)
    fun3()                        内嵌函数执行时需要调用
        

fun2()
局部外层 1
2
局部里层 22



def fun2():
    q=1
    print('局部变量',q)
    def fun3():
        w=22
        print(q)
        print(w)
    fun3()




fun2()
局部变量 1
1
22
def fun2():
    q=1
    print('局部外层',q)
def fun3():
    w=22
    print(q)
    print('局部里层',w)
fun3()
 

fun2()
局部外层 1
1
局部里层 22

##闭包:内嵌函数:在函数内部定义函数,就是函数里面嵌套函数

闭包:一个闭包就是你调用了一个函数A,这个函数A返回了一个函数B给你,这个

返回的函数B就叫比高。(但是B函数一定要嵌套在函数A里面,你在调用函数A的时候传递的参数

就是自由变量

def fun4(a):
    print(a)
    def fun5(b):
        print(a,b)
    return fun5    #调用不执行


fun4(1)
1
<function fun4.<locals>.fun5 at 0x01108A08>  #不调用返回函数体
fun4(1)(2)
1
1 2
g=fun4(1)
1
g(2)
1 2


闭包:嵌套函数,如果最后的return fun5加上() #就是调用了,F5之后 输入1会报错

 

def fun4(a):
    print(a)
    def fun5():
        print(a,11)
    return fun5()


fun4(1)
1
1 11

 

 

 

#回调函数

 

def fun6():
    print('第一个函数')
def fun7(a):
    a()
    print('第二个函数')     #把上一个函数体当成参数,然后调用

结果:    
fun7(fun6)
第一个函数
第二个函数

运行过程:先调用第一个函数,输出第一个函数的内容,然后在输出第二个函数

 

 

 

#递归函数:#调用自己

核心:递归推导式,递归条件终止

例题:已知第一个人10岁,然后每个人一次比前面一个人大两岁,问第五个人的岁数

def age(n):
    if n==1:
        return 18
    else:
        return age(n-1)+2

    
age(5)
26

 

def jiec(n):
    if n==1:
        return 1
    else:
        return jiec(n-1)*n



jiec(5)
120

 

转载于:https://www.cnblogs.com/changshen/p/8628764.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值