文档章节

2.python的函数调用遗留问题

comonda
 comonda
发布于 2016/11/07 10:14
字数 420
阅读 3
收藏 0

##python 有一种遗留的现象: 情况1:参数遗留问题

def add_end(L=[]):
    L.append('end')
    return L

a = [1,2,3]

print (add_end(a))
print (add_end())
print (add_end())
print (add_end())

结果
[1, 2, 3, 'end']
['end']
['end', 'end']
['end', 'end', 'end']
  • 解决方法: 对参数进行判断:
def add_end(L=None):
    if L == None:
        L=[]
    L.append('end')
    return L

a = [1,2,3,4]

print(add_end(a))
print(add_end())
print(add_end())

结果
[1, 2, 3, 4, 'end']
['end']
['end']

情况二:闭包问题

  • 产生原因:原因就在于返回的函数引用了变量i,但它并非立刻执行。等到3个函数都返回时,它们所引用的变量i已经变成了3。
def count():
    fs = []
    for i in range(1, 4):
        def f():
             return i*i
        fs.append(f)
    return fs

f1, f2, f3 = count()

结果
>>> f1()
9
>>> f2()
9
>>> f3()
9
  • 解决方法: 方法是再创建一个函数,用该函数的参数绑定循环变量当前的值:
def count():
    def f(j):
        def g():
            return j*j
        return g
    fs = []
    for i in range(1, 4):
        fs.append(f(i)) # f(i)立刻被执行,因此i的当前值被传入f()
    return fs
结果:
>>> f1, f2, f3 = count()
>>> f1()
1
>>> f2()
4
>>> f3()
9

** 情况一引用自廖老师的教程

** 情况二引用自廖老师的教程


codewar题目:在混有字母数字的列表中找出数字并建立列表,我的拙解。

  • ** 这里我的以为L=[]会像上面那样遗留问题,因此加了判断,去掉判断一样的出正确答案**
def filter_list(l):
    'return a new list with the strings filtered out'
    L=[]
    #if L!=None:
    #   L=[]
    for num in l:
        if isinstance(num, int):
            L.append(num)
    return L
  • 更加简洁的的解法
def filter_list(l):
    'return a new list with the strings filtered out'
    return [i for i in l if isinstance(i, int)]

© 著作权归作者所有

上一篇: 3.装饰器与闭包
下一篇: 1.markdown的使用
comonda
粉丝 0
博文 4
码字总数 1016
作品 0
广州
私信 提问
字典对象.字典生成

1.PYTHON调用hash()函数来判断键的可用性,键可以是数字,字符串甚至是元祖 2.PYTHON内置字典dict,在其它语言中也称为map,使用键值对存储,具有极快的查询速度,无论这个表有多大,查询速度都不会...

满满李
2016/02/17
26
0
python读取配置文件

python可以通过ConfigParser非常方便的读取配置文件. 基本用法 读取配置文件 写入配置文件 举例 配置文件conf.ini 2.python操作代码

cs_sharp
2016/01/19
72
1
JeeSite|保存信息修改记录续

接上一篇JeeSite|保存信息修改记录 - 简书。 遗留问题 上篇文章中遗留了一个问题,就是为了要关联类属性与注释,注释与字典的地方使用了两个map来逐个添加了相关的信息,如下所示: 在例子中...

秋风似刀
2017/11/08
0
0
使用Python制作一个简单的刷博器

呵呵,不得不佩服Python的强大,寥寥几句代码就能做一个简单的刷博器。 import webbrowser as webimport timeimport os count=0while count<10: else: 你可以试下,有没有很强大,小弟刚学P...

幕三少
2014/01/09
0
0
dwr 请求中文乱码问题

用grinder脚本模拟dwr请求,如果参数有中文,则response返回为乱码;如果把参数encode一下,返回还是为乱码。 这个问题着实纠结了我一些时间。后来发现,原来浏览器实际运行的时候,dwr的eng...

鉴客
2011/11/08
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

分页查询

一、配置 /*** @author beth* @data 2019-10-14 20:01*/@Configurationpublic class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor(){ ......

一个yuanbeth
30分钟前
4
0
在LINQPad中使用Ignite.NET

LINQPad是进行.NET开发的一款优秀工具,非常有利于Ignite.NET API的快速入门。 入门 下载LINQPad:linqpad.net/Download.aspx,注意要选择64位操作系统的AnyCPU版本; 安装Ignite.NET的NuGet...

李玉珏
43分钟前
6
0
JS其他类型值转化为Boolean类型规则

本文转载于:专业的前端网站➤JS其他类型值转化为Boolean类型规则 由于最近在笔试的时候,发现好多关于其他类型转化为Boolean类型的题目,因此总结一下! 一、String类型转化为Boolean 1.转化...

前端老手
55分钟前
6
0
EurekaClient自动装配及启动流程解析

在上篇文章中,我们简单介绍了EurekaServer自动装配及启动流程解析,本篇文章则继续研究EurekaClient的相关代码 老规矩,先看spring.factories文件,其中引入了一个配置类EurekaDiscoveryClie...

Java学习录
今天
10
0
析构函数是否必须为虚函数?为何?

p517 在C++中,基类指针可以指向一个派生类的对象。如果基类的析构函数不是虚函数,当需要delete这个指向派生类的基类指针时,就只会调用基类的析构函数,而派生类的析构函数无法被调用。容易...

天王盖地虎626
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部