10.Python初窥门径(函数进阶)】的更多相关文章

Python(函数进阶) 一.函数的传参(接上期) 形参角度(一共四种,后两种) 动态参数(万能参数)* # 定义一个函数时,*所有的位置参数聚合到一个元组中 def func(*args): # *args这里是一个元组 print(f"名门正派都有:{arg}") func("少林","武当","峨眉") # 名门正派都有:("少林","武当","峨眉") ---…
[转]Python之函数进阶 本节内容 上一篇中介绍了Python中函数的定义.函数的调用.函数的参数以及变量的作用域等内容,现在来说下函数的一些高级特性: 递归函数 嵌套函数与闭包 匿名函数 高阶函数 内置函数 总结 一.递归函数 函数是可以被调用的,且一个函数内部可以调用其他函数.如果一个函数在内部调用本身,这个函数就是一个递归函数.函数递归调用的过程与循环相似,而且理论上,所有的递归函数都可以写成循环的方式,但是递归函数的优点是定义简单,逻辑清晰.递归和循环都是一个重复的操作过程,这些重复…
函数进阶: 一.动态参数:*args  **kwargs *args是元祖形式,接收除去键值对以外的所有参数 # args可以换成任意变量名,约定俗成用args **kwargs接收的只是键值对的参数,并保存在字典中. # kwargs可以换成任意变量名,约定俗成用kwargs *的魔性用法: l1 = [1,2,3] l2 = ['alex','taibai'] def func1(*args): print(args) # 结果:('1','2','3','alex','taibai') f…
本节内容 上一篇中介绍了Python中函数的定义.函数的调用.函数的参数以及变量的作用域等内容,现在来说下函数的一些高级特性: 递归函数 嵌套函数与闭包 匿名函数 高阶函数 内置函数 总结 一.递归函数 函数是可以被调用的,且一个函数内部可以调用其他函数.如果一个函数在内部调用本身,这个函数就是一个递归函数.函数递归调用的过程与循环相似,而且理论上,所有的递归函数都可以写成循环的方式,但是递归函数的优点是定义简单,逻辑清晰.递归和循环都是一个重复的操作的过程,这些重复性的操作必然是需要有一定的规…
Python(函数初识) 一.初识函数 面向过程缺点 : 代码重复,代码描述性不高 函数 : 函数是以功能为导向,一个函数封装一个功能. 函数的优点 : 减少代码重复性,增强了代码的可读性 二.函数的结构 # 结构 def 函数名(): 内容 # def : 定义一个函数,def关键字后紧跟一个空格 # def 函数名() : 函数名命名方式与变量命名规范一致 三.函数的调用 # 结构 def 函数名(): 内容 函数名() # 函数名() : 函数的执行 -------------------…
一,生成器表达式 #生成器表达式比列表解析更省内存,因为惰性运算 #!/usr/bin/env python #_*_coding:utf-8_*_ new_2 = (i*i for i in range(100)) #生成器表达式 print(list(new_2)) #注意括号是小括号 对比 #!/usr/bin/env python #_*_coding:utf-8_*_ # egg_list=['鸡蛋%s' %i for i in range(10)] 列表推倒式 # print(egg…
楔子 假如有一个函数,实现返回两个数中的较大值: def my_max(x,y): m = x if x>y else y return mbigger = my_max(10,20)print(bigger) 之前是不是我告诉你们要把结果return回来你们就照做了?可是你们有没有想过,我们为什么要把结果返回?如果我们不返回m,直接在程序中打印,行不行? 来看结果: >>> def my_max(x,y): ... m = x if x>y else y ... >&…
昨天我们简单的了解了函数的定义,调用,以及传参,其实还有一个更重要的传参:动态传参,让我们继续昨天没有说完的,以及今天我要分享的东西. 一.动态传参 之前我们说过了传参,如果我们需要给一个函数传参,而函数又是不确定的,或者我给一个函数传很多参数,我的形参就要写很多,很麻烦,怎么办呢?我们可以考虑用动态参数 形参的第三种:动态参数 动态参数分两种: 1.动态接收位置参数 首先我们先回顾一下位置参数,位置参数按照位置进行传参 def chi(zhushi,fushi): print('我要吃',zh…
首先来看下面这个函数. def func(x,y): bigger = x if x > y else y return bigger ret = func(10,20) print(ret) #运行结果 : 20 在上面的函数中我们把较大值通过return这个关键字返回回来了,如果我不返回而是直接打印可不可以?如下: def func(x,y): bigger = x if x > y else y func(10,20) print(bigger) #运行结果 : NameError: n…
一,匿名函数 #简单的需要用函数去解决的问题 匿名函数的函数体 只有一行#也叫lambda表达式# cal2(函数名) = lambda n(参数) : n*n(参数怎么处理,并且返回值)#参数可以有多个,用逗号隔开#匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值#返回值和正常的函数一样可以是任意数据类型1.函数和匿名函数 #!/usr/bin/env python #_*_coding:utf-8_*_ def cal(n): return n*n print(cal(1…
一,可迭代的&可迭代对象 1.一个一个的取值就是可迭代的   iterable#str list tuple set dict#可迭代的 ——对应的标志 __iter__ 2.判断一个变量是不是一个可迭代的 # print('__iter__' in dir(list))# print('__iter__' in dir([1,2,3])) 3.可迭代协议——凡是可迭代的内部都有一个__iter__方法 二,迭代器 1.将可迭代的转化成迭代器 #!/usr/bin/env python #_*_…
一,内置函数 #内置的模块#拿过来直接就用的:内置的函数 #!/usr/bin/env python #_*_coding:utf-8_*_ #内置的模块 #拿过来直接就用的:内置的函数 #作用域相关(2)(了解) #1.globals()==获取全局变量的字典 #2.locals()==获取执行方法所在命名空间内的局部变量的字典 #str类型代码执行相关(3) #1.eval()==将字符串类型的代码执行并返回结果==(掌握) #print(eval('1+2+3+4')) #print(ev…
一,什么叫递归 #递归#在一个函数里调用自己#python递归最大层数限制 997#最大层数限制是python默认的,可以做修改#但是我们不建议你修改 例子和尚讲故事 #!/usr/bin/env python #_*_coding:utf-8_*_ #:基础版本 def story(): print("从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呀?") while True: story() #:递归版本 def story(): #递归函数,在一个函数内调用自己 #最大…
一,命名空间 #局部命名空间#全局命名空间#内置命名空间 #三者的顺序#加载顺序       内置命名空间(程序运行前加载)->全局命名空间(程序运行中:从上到下加载)->局部命名空间(程序运行中:调用时才加载) 取值 *在局部调用:局部命名空间>全局命名空间>内置命名空间 #!/usr/bin/env python #_*_coding:utf-8_*_ max = 1 def f(): print(max) #局部调用max会找全局max=1,如果没有就会打印内置max f()…
一.生成器补充 1.什么是生成器? 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己内置的__iter__方法),所以生成器就是可迭代对象. 2.生成器分类 (1)生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果.yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行. (2)生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表. 3.为何使用生…
一.函数对象 函数是第一类对象,即函数可以当作数据传递 1 可以被引用 2 可以当作参数传递 3 返回值可以是函数 4 可以当作容器类型的元素 def foo(): print('from foo') func=foo #将函数赋值给func print(foo) #打印函数,将返回函数在内存中的地址 print(func) #此时func = foo func() #加上大括号才能引用函数 运行结果: <function foo at 0x00000000007E00D0> <func…
1. 动态传参 *, ** : 形参: 聚合 位置参数* -> 元组 def func(*args, a, b, c): print(a, b , c, args) func(1,2,3,4,5,6,7, a=8, b=9,c=10) 关键字** -> 字典 def func(**kwargs): print(kwargs) func(a=1, b=2, c=3, haha="呵呵", good="not bad") 实参: 打散 列表, 字符串, 元素…
嵌套函数 ---函数内部可以再次定义函数 ---函数若想执行,必须被调用 注意,下例中,执行结果为什么? age = 19 def func1(): print(age) def func2(): print(age) func2() age = 73 func1() 如下: 执行fun2()时,age按从内而外规则寻找,但age = 73还未执行.但又被检测到赋值语句,因此程序不知道应该从哪里寻找,故报错. *global.nonlocal关键字: global:声明变量在全局作用域内使用 n…
一,装饰器本质 闭包函数 功能:就是在不改变原函数调用方式的情况下,在这个函数前后加上扩展功能 作用:解耦,尽量的让代码分离,小功能之前的分离. 解耦目的,提高代码的重用性 二,设计模式 开放封闭原则 *对扩展是开放的 *对修改是封闭的 三,代码解释 *通用代码 #!/usr/bin/env python #_*_coding:utf-8_*_ def timmer(func): #---> jjj def inner(*args,**kwargs): ret = func(*args,**kw…
Python(函数名,可迭代对象,迭代器) 一.默认参数的坑 # 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是. def func(a,l=[]): l.append(a) return l print(func(1)) # [1] print(func(2)) # [1,2] print(func(3)) # [1,2,3] 二.函数名的应用 函数名指向的是函数的内存地址,加上()就执行这个函数 def func(args): return args print(func) #…
Basic Python : Map, Filter, Reduce, Zip 1-Map() 1.1 Syntax # fun : a function applying to the iterable object # iterable : such as list, tuple, string and other iterable object map(fun, *iterable) # * token means that multi iterables is supported 1.2…
等待更新…………………… 后面再写…
目录 1. 函数进阶 2. 命名空间 3. 关键字global和nonlocal 1. 函数进阶 动态接收位置参数 之前写的函数都是固定参数的,假设有个函数需要的参数由几十个,一个个写在形参的位置会非常麻烦,因此我们要考虑使用动态参数,使用动态参数时需要在参数前加*,表示接收多个参数: In [13]: def func5(a, b, c, d, e, f): ...: print(a, b, c, d, e, f) In [14]: func5(1, 2, ,3 ,4 , 5, 6) # 按照…
一.今日主要内容总览(重点) 1.动态传参(重点) *,** *: 形参:聚合 位置参数*=>元组 关键字**=>字典 实参:打散 列表,字符串,元组=>* 字典=>** 形参顺序: 位置,*args,默认值,**kwargs 无敌传参: def func(*args,**kwargs): #arguments参数, keyword-arguments关键字参数 pass 2.作用域和名称空间 名称空间:用来存放名字(变量,函数名,类名,引入的模块名字)的 1.全局名称空间:我们在…
函数基础部分 .什么是函数? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率. 2.定义函数 定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":". def 是固定的,不能变,他就是定义函数的关键字. 空格:为了将def关键字和函数名分开,必须空(四声),当然你可以空2格.3格或者你想空多少都行,但正常人还是空1格. 函数名:函数名只能包含字符串.下划线和数字且不能以数字开头.虽然函数名可以随便起,…
函数基础部分 1.什么是函数? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率. 2.定义函数 定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":". def 是固定的,不能变,他就是定义函数的关键字. 空格:为了将def关键字和函数名分开,必须空(四声),当然你可以空2格.3格或者你想空多少都行,但正常人还是空1格. 函数名:函数名只能包含字符串.下划线和数字且不能以数字开头.虽然函数名可以随便起,…
函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形式 无参数,无返回值 无参数,有返回值 有参数,无返回值 有参数,有返回值  定义函数时,是否接收参数,或者是否返回结果,是根据 实际的功能需求 来决定的! 如果函数 内部处理的数据不确定,就可以将外界的数据以参数传递到函数内部 如果希望一个函数 执行完成后,向外界汇报执行结果,就可以增加函数的返…
匿名函数进阶 前一章已经说了匿名函数,匿名函数还可以和其他内置函数结合使用 1.map map():映射器,映射 list(map(lambda x:x*2,range(10))) #把range产生的数字映射进lambda函数里进行计算 结果: 注意:mapmap(function, sequence[, sequence, ...])接受的参数,第一个是函数,第二个,第三个可选参数也是序列 当第一个参数不为函数时: 因为把函数放进去,即代表要进行运算处理,设置为None即表示不做计算 说到这…
python_day_10 一.今日主要内容 1. 动态参数 位置参数的动态参数: *args 关键字参数的动态参数 : **kwargs 顺序: 位置,*args,默认值,**kwargs 在形参上*聚合, **聚合 在实参上*打散, **打散 2. 命名空间和作用域 命名空间: 1. 内置命名空间: python解释内部运行时的变量函数 2. 全局命名空间: 我们在py文件中直接声明出来的变量,函数 3. 局部命名空间: 在函数内部声明的变量和函数. 作用域: 1.全局作用域:内置+全局 2…
函数进阶 1.函数命名空间和作用域 命名空间一共分为三种: 全局命名空间 局部命名空间 内置命名空间 *内置命名空间中存放了python解释器为我们提供的名字:input , print , str , list , tuple... 三种命名空间之间的加载与取值顺序: 加载顺序:内置命名空间(程序运行前加载)->全局命名空间(程序运行中:从上到下加载)->局部命名空间(程序运行中:调用时才加载) 取值顺序: 在局部调用:局部命名空间->全局命名空间->内置命名空间 在全局调用:全…