随笔分类 -  Python学习

摘要:利用闭包返回一个计数器函数,每次调用它返回递增整数: # -*- coding: utf-8 -*-def createCounter(): def counter(): return 1 return counter # 测试: counterA = createCounter() print(c 阅读全文
posted @ 2018-07-02 14:09 Cranx 阅读(1207) 评论(0) 推荐(0)
摘要:a[::-1]相当于 a[-1:-len(a)-1:-1],也就是从最后一个元素到第一个元素复制一遍。 阅读全文
posted @ 2018-05-21 17:13 Cranx 阅读(233) 评论(0) 推荐(0)
摘要:利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456: # -*- coding: utf-8 -*- from functools import reduce def str2float(s): DIGITS = {'0': 0, '1': 阅读全文
posted @ 2018-05-11 13:27 Cranx 阅读(1233) 评论(0) 推荐(0)
摘要:Python中+=是什么意思? 1. 相加,然后返回值给前一个变量eg: >>> a=1>>> b=2>>> a+=b>>> a32. 字符串连接>>> a='1'>>> b='2'>>> a+=b>>> a'12'注意第二个有引号, 是作为字符串处理的。 阅读全文
posted @ 2018-05-10 16:32 Cranx 阅读(296) 评论(0) 推荐(0)
摘要:。map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。 举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map( 阅读全文
posted @ 2018-05-10 16:31 Cranx 阅读(118) 评论(0) 推荐(0)
摘要:注意,赋值语句: a, b = b, a + b 相当于: t = (b, a + b) # t是一个tuple a = t[0] b = t[1] 但不必显式写出临时变量t就可以赋值。 阅读全文
posted @ 2018-05-10 14:10 Cranx 阅读(234) 评论(0) 推荐(0)
摘要:把abs指向10后,就无法通过abs(-10)调用该函数了!因为abs这个变量已经不指向求绝对值函数而是指向一个整数10! 当然实际代码绝对不能这么写,这里是为了说明函数名也是变量。要恢复abs函数,请重启Python交互环境。 那么函数名是什么呢?函数名其实就是指向函数的变量!对于abs()这个函 阅读全文
posted @ 2018-05-10 13:46 Cranx 阅读(129) 评论(0) 推荐(0)
摘要:函数就是面向过程的程序设计的基本单元。 函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出, 阅读全文
posted @ 2018-05-10 11:20 Cranx 阅读(142) 评论(0) 推荐(0)
摘要:凡是可作用于for循环的对象都是Iterable类型; 凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列; 集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。 Pytho 阅读全文
posted @ 2018-05-10 11:08 Cranx 阅读(115) 评论(0) 推荐(0)
摘要:如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断: >>> from collections import Iterable >>> isinstance('abc', Iterable) # str是否可迭代 True >>> isinstance([ 阅读全文
posted @ 2018-04-27 16:23 Cranx 阅读(1086) 评论(0) 推荐(0)
摘要:Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身: >>> for i, value in enumerate(['A', 'B', 'C']): ... print(i, value) ... 0 A 1 B 2 C 阅读全文
posted @ 2018-04-27 16:22 Cranx 阅读(206) 评论(0) 推荐(0)
摘要:在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以看出: fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! 阅读全文
posted @ 2018-04-23 16:40 Cranx 阅读(144) 评论(0) 推荐(0)
摘要:在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。 Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。 阅读全文
posted @ 2018-04-20 16:53 Cranx 阅读(2328) 评论(0) 推荐(0)
摘要:如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。这种方式定义的函数如下: def person(name, age, *, city, job): print(name, age, city, job) 和关键字参数**kw不同,命名关键字参数需要一个 阅读全文
posted @ 2018-04-20 14:09 Cranx 阅读(271) 评论(0) 推荐(0)
摘要:定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数: def calc(*numbers): sum = 0 for n in numbe 阅读全文
posted @ 2018-04-19 16:14 Cranx 阅读(338) 评论(0) 推荐(0)
摘要:默认参数很有用,但使用不当,也会掉坑里。默认参数有个最大的坑,演示如下: 先定义一个函数,传入一个list,添加一个END再返回: def add_end(L=[]): L.append('END') return L 当你正常调用时,结果似乎不错: >>> add_end([1, 2, 3]) [ 阅读全文
posted @ 2018-04-16 16:51 Cranx 阅读(291) 评论(0) 推荐(0)
摘要:1 # -*- coding: utf-8 -*- def triangles(): line = [1] while True: yield line line = [x + y for x, y in zip([0] + line, line + [0])] n = 0 for t in tri 阅读全文
posted @ 2017-07-03 19:25 Cranx 阅读(166) 评论(0) 推荐(0)
摘要:d = {'x': 'A', 'y': 'B', 'z': 'C'} # 下方的三种方式都能生成同样的列表 a = [] for k, v in d.items(): # 直接生成键和值,再添加到空列表中 a.append(str(k + '=' + v)) print(a) b = [] for 阅读全文
posted @ 2017-07-03 12:33 Cranx 阅读(154) 评论(0) 推荐(0)
摘要:直接赋值:其实就是对象的引用(别名)。 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。 字典浅拷贝实例 实例 >>>a = {1: [1,2,3]} >>> b = a.copy() 阅读全文
posted @ 2017-07-01 15:38 Cranx 阅读(167) 评论(0) 推荐(0)
摘要:Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块。 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。2. copy.deepcopy 深拷贝 拷贝对象及其子对象一个很好的例子: Code highlighting produc 阅读全文
posted @ 2017-07-01 15:25 Cranx 阅读(154) 评论(0) 推荐(0)