壹拾贰

函数基础

一、可变长函数

? 可变长参数:函数在调用时,传入的参数个数不固定

? 调用函数时,传值有两种方式,一种是位置实参,另一种是关键字实参,因此形参接受传值也需要有两种方法,接收溢出传值的两种方式为位置实参(*)和关键字实参(**)。

1.1 可变长形参(*)

? 形参中的 * 会将溢出的位置实参全部接收,然后存储元组的形式,然后把元组赋值给 * 后的参数。需要注意的是:* 后的参数名约定俗成为args。

def sum_self(*args):
    res = 0
    for num in args:
        res += num
    return res
res = sum_self(1, 2, 3, 4)
print(res)

10

1.2 可变长实参(*)

? 实参中的会将 * 后参数的值循环取出,打散成位置实参。以后但凡碰到实参中带 * 的,它就是位置实参,应该马上打散成位置实参去看。

def func(x, y, z, *args):
    print(x, y, z, args)
func(1, *(1, 2), 3, 4)

1 1 2 (3, 4)

1.3 可变长形参(**)

? 形参中的 ** 会将溢出的关键字实参全部接收,然后存储字典的形式,然后把字典赋值给 ** 后的参数。需要注意的是:** 后的参数名约定俗成为kwargs。

def func(**kwargw):
    print(kwargw)
func(a=5)

{'a': 5}

1.4 可变长实参(**)

? 实参中的会将 ** 后参数的值循环取出,打散成关键字实参。以后但凡碰到实参中带 ** 的,它就是关键字实参,应该马上打散成关键字实参去看。

def func(x, y, z, **kwargs):
    print(x, y, z, kwargs)
func(1, 3, 4, **{'a': 1, 'b': 2})

1 3 4 {'a': 1, 'b': 2

1.5 命名关键字形参

? 命名关键字形参:在函数定义阶段,*后面的参数都是命名关键字参数。

? 特点:在传值时,必须按照key=value的方式传值,并且key必须命名关键字参数的指定的参数名。

二、函数对象

? 函数是第一类对象,即函数可以被当做数据处理。函数对象有四大功能:

  1. 引用

    def func():
        print('from func')
    
    x = 'hello world'
    y = x
    
    f = func
    print(f)
    
    <function func at 0x00000243CD0C1EA0>
  2. 当作参数传给一个函数
  3. 可以当作函数的返回值
  4. 可以当作容器类型的元素

三、函数嵌套

? 函数内部定义的函数,无法在函数外部使用内部定义的函数。

? 现在有一个需求,通过给一个函数传参即可求得某个圆的面积或者圆的周长。也就是说把一堆工具丢进工具箱内,之后想要获得某个工具,直接从工具箱中获取就行了。

from math import pi
def circle(radius, action='area'):
    def area():
        return pi * (radius**2)
    def perimeter():
        return 2*pi*radius
    if action == 'area':
        return area()
    else:
        return perimeter()
print(f"circle(10): {circle(10)}")
print(f"circle(10,action='perimeter'):{circle(10,action='perimeter')}")

circle(10): 314.1592653589793
circle(10,action='perimeter'): 62.83185307179586
def max2(x, y):
    if x > y:
        return x
    else:
        return y
def max4(a, b, c, d):
    res1 = max2(a, b)
    res2 = max2(res1, c)
    res3 = max2(res2, d)
    return res3
print(max4(1, 2, 3, 4))

4

四、名称空间和作用域

4.1 名称空间

? 名称空间(name spaces):在内存中有一块内存存储变量名与变量间的绑定关系的空间,而这个空间称为名称空间。

4.1.1 内置名称空间

? 内置名称空间:存放Pyhton解释器自带的名字,如int、float、len

? 生命周期:在解释器启动时生效,在解释器关闭时失效。

4.1.2 全局名称空间

? 全局名称空间:除了内置和局部的名字之外,其余都存放在全局名称空间。

? 生命周期:在文件执行时生效,在文件执行结束后失效。

4.1.3 局部名称空间

? 局部名称空间:用于存放函数调用期间函数体产生的名字。

? 生命周期:在文件执行时函数调用期间时生效,在函数执行结束后失效。

4.1.4 加载顺序

? 由于.py文件是由Python解释器打开的,因此一定是在Python解释器中的内置名称空间加载结束后,文件才开始打开,这个时候才会产生全局名称空间,但文件内有某一个函数被调用的时候,才会开始产生局部名称空间,因此名称空间的加载顺序为:内置--》全局--》局部。

4.1.5 查找顺序

? 由于名称空间是用来存放变量名与值之间的绑定关系的,所以但凡要查找名字,一定是从三者之一找到,查找顺序为:从当前的所在位置开始查找,如果当前所在的位置为局部名称空间,则查找顺序为:局部--》全局--》内置。

4.2 作用域

? 作用域即作用的区域。

4.2.1 全局作用域

? 全局作用域:全局有效,全局存活,包含内置名称空间和全局名称空间。

4.2.2 局部作用域

? 局部作用域:局部有小,临时存储,只包含局部名称空间。

原文地址:https://www.cnblogs.com/tangceng/p/11334530.html

时间: 2024-08-29 15:25:24

壹拾贰的相关文章

【壹拾壹周】final分数分配

组名: 新蜂 组长: 武志远 组员: 宫成荣 谢孝淼 杨柳 李峤 项目名称: java俄罗斯方块NEO 发布时间:12.3 武志远 武志远 武志远 武志远 武志远 宫成荣 宫成荣 杨柳 宫成荣 宫成荣 李峤 杨柳 李峤 谢孝淼 谢孝淼 谢孝淼 李峤 谢孝淼 杨柳 杨柳 杨柳 谢孝淼 宫成荣 李峤 李峤 评分规则参见B-1分数规则,与B-1规则相同,http://www.cnblogs.com/Boxer1994/p/6039442.html. 每名同学占比:武志远:0.26,杨柳:0.20,宫成

【壹拾壹周】评价

礼物挑选小工具: 优点:ui比之前好一些,好像礼物比之前更多了. 缺点:系统是根据用户选择的信息进行推荐的,而这个选择信息太少了,还需进一步细化,比如大家的女朋友都在18-22岁之间,价格区间都是几百块钱,那么如果很多人使用,礼物推荐重复的几率太大了. 食物链教学: 优点:比之前改进了一些微小的地方,比如控制面板默认不出现在屏幕中间,而是右边,这样就不会影响之后相关的操作了. 缺点:新增添的生物是不能进行自动连线的,当然这不是问题,设计就是这样的.但是除了这一点,原生生物跟后加入生物还有个不同,

【壹拾壹周】final_review

项目名:俄罗斯方块 组名:新蜂 组长:武志远 组员:宫成荣 杨柳 谢孝淼 李桥 final Review会议 时间:2016.12.3 会议内容 设想和目标 1.在final阶段发布时的预期目标是什么,期望实现那些功能,具体的实施程度如何? 预期目标:给用户一个surprise,让用户感到excited.final发布与之前的beta相比增加了很多功能,增加了三个功能键,分别是方块瞬间下落,瞄准系统,作弊系统.完善了等级系统. 这些功能大部分被良好的实现了,除了数据库排名系统,本来计划是搞一个全

资源 之 4.4 Resource通配符路径(拾贰)

4.4.1  使用路径通配符加载Resource 前面介绍的资源路径都是非常简单的一个路径匹配一个资源,Spring还提供了一种更强大的Ant模式通配符匹配,从能一个路径匹配一批资源. Ant路径通配符支持"?"."*"."**",注意通配符匹配不包括目录分隔符"/": "?":匹配一个字符,如"config?.xml"将匹配"config1.xml": "

壹拾伍

函数进阶 一.递归 ? 函数的递归调用,是一种特殊的嵌套调用,但是在调用一个函数的过程中,直接或者间接的调用了他自身. ? 递归的核心: 递进的时候能够达到一个结果,问题规模越来越小(不一定要真正的达到). ? 递归函数不断地调用自身,就会很肯能会进入无限调用的死循环.同样是死循环,while循环就会进行下去,而递归调用就会在解释器设定的最大范围停止并报错"超出范围".这是因为while循环的每次循环都只存在一个内存空间,而递归则是每一次都开辟一个新的空间,旧的空间不消失,这样就会占用

壹拾陆

模块基础 一.模块的四种形式 1.1 什么是模块 ? 模块是一系列功能的集合体,因为函数是某一功能的集合体,所以模块可以看作是一系列函数的集合体. ? 一个文件内部有很多的函数,因此一个文件就可以看成是一个模块. ? 一个python文件的名称为XXX.py,那么模块的名称就是XXX. 1.2 模块的四种形式 自定义模块:自己用python写一个有一定功能的文件,就可以称为一个自定义模块. 第三方模块:已经有别人写好的一定功能的模块,使用需要自己安装,目前已有13w+的第三方模块了. 内置模块:

壹拾柒

Python常用模块 一.包 1.1 什么是包 ? 包是一种形式,本质就是一个含有.py文件的文件夹. 1.2 为什么使用包 ? 模块的第一个版本只有10个功能,但是未来在扩展版本的时候,模块名和用法应该最好不要去修改,但是这只是对使用者友好,而由于版本扩展,文件越来越大,模块设计者对模块的管理.维护会越来越复杂,因此我们可以使用包来扩展模块的功能. 1.3 如何使用包 1.3.1 模块和包 ? 导入模块发生的三件事: 创建一个包的名称空间 执行py文件,将执行过程中产生的名字存放于名称空间中.

土办法解决日期转换问题,转出格式为。。。 贰零壹陆年零壹月零捌日

/** * 参数名称:@param dateStr 待转换的日期(String格式,结构为yyyy-MM-dd) * 返回值:String 小写汉字的日期 * 方法描述:土办法解决日期转换问题,转出格式为... 贰零壹陆年零壹月零捌日 * @author:zhouzhiwei * 创建时间:2014-5-23 下午05:59:20 */ public static String stringToChineseSmallRMB(String dateStr) { // 传参数的格式为 2011-1

搜狗输入法使用技巧

你是否曾经为了找一个字而翻了好几页搜狗输入法? 你是否不满足于只输入拼音的打字方式? 如果是,那么这篇文章或许能够帮助到你. 1.快速插入日期 输入"sj"或"rq",可以快速查询当前的时间和日期 2.u模式拆分输入 2.1 知道字的形状不知道这个字怎么念? 输入"uniuniuniu",即牛牛牛的拼音,就可以得到"犇"字. 另外是笔画,规定的笔画有h横.s竖.p撇.n捺.z折,比如要输入"珍"字,可以输入