python7-函数

#全局变量和局部变量
# name = 'alex'
# kk = ['a','b']
# def change_name():
#     global name
#     name = 'eric'
#     kk.append(3)
#     print('change_name',name,kk)
# # change_name()
# print(name,kk)

#没有global声明字段时
#     -有局部变量声明
#         只作用于函数内部,无法对全局变量进行赋值,但可以对全局可变类型进行append/remove等操作
#     -无局部变量说明
#         逐级往上寻找变量中对应的参数
# #有global声明字段时
#     -有局部变量声明
#         可以修改和赋值该变量
#     -无局部变量说明
#         直接从全局变量中获取

# name = 'aLEX'
# def func1():
#     name = '11'
#     print(name)
#     def func2():
#         name = '22'
#         def func3():
#             print(name)
#         func3()
#         print(name)
#     func2()
#     print(name)
# print(name)
# func1()
# print(name)

#对比如下两段代码,了解global和nolocal的区别,nonlocal只能更改上一级中的变量值
# def test1():
#     name = '11'
#     def test2():
#         global name
#         name = '22'
#         print(name)
#     test2()
#     print(name)
# print(name)
# test1()
# print(name)

# def test1():
#     name = '11'
#     def test2():
#         nonlocal name
#         name = '22'
#         print(name)
#     test2()
#     print(name)
# print(name)
# test1()
# print(name)

#递归函数
# import time
# person_list = ['alex','linhai','zhangsan','lisi']

# def askway():
#     print('-'*30)
#     if len(person_list) == 0:
#         return 'Nobody Know!'
#     person = person_list.pop()

#     if person == 'alex':
#         return '%s 说:我知道,银行在西街' %(person)
#     print('hi %s,你知道银行在哪吗' %(person))
#     print('%s说,我不知道,我帮你问问%s' %(person,person_list))

#     time.sleep(3)
#     res = askway()
#     print('%s问的结果是 %s' %(person,res))
#     return res

# print(askway())
    
# l = []
# def test(n):
#     l.append(n)
#     if n//2 == 1:
#         return l
#     n = n//2
#     res = test(n)

#     return res

# print(test(100))

#函数作用域
# name = 'alex'
# def foo():
#     name = 'lihaixiang'
#     def bar():
#         print(name)
#         def tt():
#             global name
#             name = 'zhangsan'
#             print(name)
#         return tt
#     return bar
# print('运行前参数值',name)
# foo()()()
# print('运行后参数值',name)

# fun1 = lambda x:x+1    #匿名函数
# print(fun1(10))

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

#函数优化,需要尾调用:函数的最后一步才调用另一个函数
#高阶函数:1.函数的传入参数是一个函数名;2.函数的返回值是一个函数名

#非尾调用函数
# def cal(seq):
#     print(seq)
#     if len(seq) == 1:
#         return seq[0]
#     head,*tail=seq
#     print(head)
#     print(tail)
#     return head+cal(tail)

# print(cal(range(10)))

#优化后的尾调用函数
# def cal(l):
#     print(l)
#     if len(l) == 1:
#         return l[0]
#     # first,second,*args =l 
#     first = l[0]
#     second = l[1]
#     l[0] = first + second
#     l.pop(1)
#     return cal(l)

# print(cal([i for i in range(10)]))
#或者
# print(cal(list(range(10))))
# v = range(10)
# print(list(v))
#map 函数:将列表中的元素,通过定义的函数进行逐个循环处理,返回一个'列表'(需要通过list进行转换),位置与原列表相同
# li = [1,2,3,4]
# def add_one(x):
#     return x+1
# def map_test(func1,array):
#     re = []
#     for i in array:
#         res = func1(i)
#         re.append(res)
#     return re
# print(map_test(add_one,li))
# print(map_test(lambda x:x+1,li))
# print(map(lambda x:x+1,li))
# print(list(map(lambda x:x+1,li)))
# filter函数:对列表中的元素逐个进行依据是前面的函数判断,如果判断结果为True,则保留列表元素,返回一个'列表'(需要通过list进行转换)
# f = ['alex','aboo','coobo']
# def check(x):
#     return x.startswith('a')

# def filter_test(array):
#     re = []
#     for i in array:
#         if check(i):
#             re.append(i)
#     return re

# print(filter_test(f))
# print(list(filter(check,f)))
# print(list(filter(lambda x:not x.startswith('a'),f)))

# dic = [
#     {'name':'alex','age':100},
#     {'name':'aoo','age':1000},
#     {'name':'cbb','age':18},
# ]
# print(list(filter(lambda x:x['age'] <= 18,dic)))

# reduce函数:对列表内的所有元素进行前面的函数累计处理,并返回最终结果
from functools import reduce
r = [1,2,3,5]

# def add(x,y):
#     return x+y
# def reduce_test(array,init=None):
#     if init == None:
#         s = array.pop(0)
#     else:
#         s = init
#     for i in array:
#         s = add(s,i)
#     return s

# print(reduce_test(r))
# print(reduce_test(r,100))
# print(reduce(lambda x,y:x+y,r,1000))
print(reduce(lambda x,y:x+y,r))


#内置函数
# #abs 取绝对值
# print(abs(-34))
# #all 对列表内所有元素进行bool运算,只有所有结果都为True时,返回True;如果列表为空,也返回True
# print(all(['xx',1,3]))
# print(all(['xx',1,3,'']))
# print(all([]))
# print(bytes('你好',encoding = 'utf-8'))
# print(bytes('你好',encoding = 'utf-8').decode('utf-8'))

# #dir打印某一个对象下的所有方法
# print(dir(int))

# #divmod 除法算商和余数,可以用来分页
# print(divmod(100,6))

#eval将字符串内的数据类型输出,或者直接数字运算后输出
# dic = {'name':'alex','age':18}
# # print(dic['name'])
# s = str(dic)
# print(s,type(s))                 
# print(eval(s),type(eval(s)))     

# s1 = '1+2+3'
# print(eval(s1))

#hash,计算一个文件的唯一值
# name = '123ss'
# print(hash(name))

# #help 查看一些命令的具体作用
# print(help(map)) 

#bin,hex,oct 进制转换
# print(bin(13))      #10进制-> 2进制
# print(hex(13))      #10进制-> 16进制
# print(oct(13))      #10进制-> 8进制

#isinstance 判断是否属于某个数据类型,返回布尔值
# print(isinstance(1,int))
# print(isinstance('sss',str))
# print(isinstance([],list))
# print(isinstance((),tuple))
# print(isinstance({''},set))
# print(isinstance({},dict))

#globals打印出当前所有的全局变量
#locals打印出当前的局部变量
# a = 11111222233334444555677
# def test():
#     b = '221ssssssssssssss'
#     print(globals())
#     print(locals())
# test()

#zip 将两个字符串或者列表一一组合成多个元组组成的列表
# print(list(zip('12345','abcde')))
# print(list(zip(['12','23','34'],['aa','bb','cc'])))
# print(list(zip(['12','23','34'],['aa','bb','cc','dd'])))

#max,min通过for循环比较大小,如果是字符串则从前往后逐个字符进行比较
# s = ['a','b','c']
# print(max(s))
# print(max(1,2,3))
# #print(max('s',1,2,3))       #会报错,不同数据类型之间无法比较
# dic = [{'name':'alex','age':18},{'name':'aboo','age':1000},{'name':'brit','age':100}]
# print(max(dic,key=lambda x:x['age']))

# #sorted,与比较大小类似,只是从小到大进行排序,返回一个序列
# s = ['a','de','c','bb']
# print(sorted(s))
# print(sorted([1,9,4,3,5]))
# #print(max('s',1,2,3))       #会报错,不同数据类型之间无法比较
# dic = {'zhang':133,'li':20,'wang':3999}
# print(max(zip(dic.values(),dic.keys())))
# l = [{'name':'alex','age':18},{'name':'aboo','age':1000},{'name':'brit','age':100}]
# print(sorted(l,key=lambda x:x['age']))


# #chr ord ascii码对应的数字和符号之间相互转换
# print(chr(89))
# print(ord('1'))

#pow 相当于x**y, x**y%z
# print(pow(3,2))
# print(pow(3,3,2))

#reversed将序列反向输出
# s = 's1243asd'
# l = ['s','1','333',22,(33,12)]
# s_r = reversed(s)
# l_r = reversed(l)
# print(list(s_r))
# print(list(l_r))

#round四舍五入取整
# print(round(0.7))
# print(round(123.456))

#slice 定义切片
# s = 's123jjss'
# v = slice(1,5)
# v1 = slice(1,5,2)
# print(s[v])
# print(s[v1])
#__import__ 通过字符串导入文件名,通过情况下,import test, 如果获取到的test是字符串,则需要
# import day9_1       #可以直接调用文件名
#import 'day9_2'   #会报错,因为无法直接调用字符串
# __import__('day9_1')

posted @ 2025-02-13 17:04  小学生132  阅读(16)  评论(0)    收藏  举报