python函数

Python next函数

流过昼夜 提交于 2020-03-22 09:56:57
python 3.x内置函数next可以从迭代器中检索下一个元素或者数据,可以用于迭代器遍历,使用的时候注意会触发 StopIteration 异常! 一.next函数简介 语法如下: next(iterator[,default]) iterator – 迭代器; default – 可选参数; 如果不设置的话,当迭代器没有下一个元素时,会抛StopIteration 异常;如果设置了该参数,没有下一个元素时,默认返回该参数; 返回值:返回迭代器中当前元素的下一个元素; 二.next函数使用 1.没有设置default参数,使用next函数时,如果没有下一个元素或者数据,会抛StopIteration 异常,注意异常处理; >>> a = iter('1234') >>> next(a) '1' >>> next(a) '2' >>> next(a) '3' >>> next(a) '4' >>> next(a) # 没有下一个元素的时候使用next,直接抛异常 StopIteration Traceback (most recent call last): File "<pyshell#18>", line 1, in <module> next(a) StopIteration 2.使用default参数,使用next函数,如果没有下一个元素或者数据,返回default值;

python中静态方法、类方法、属性方法区别

ぐ巨炮叔叔 提交于 2020-03-22 08:28:44
在python中,静态方法、类方法、属性方法,刚接触对于它们之间的区别确实让人疑惑。 类方法(@classmethod) 是一个函数修饰符,表是该函数是一个类方法 类方法第一个参数是cls,而实例方法第一个参数是self(表示该类的一个实例) 类中普通函数至少要一个self参数,代表类对象实例 类方法至少需要一个cls参数,通过cls可以获取到类本身的属性方法等元信息。当有个子类继承时,传入的是子类对象。 对于类方法两种调用方式,类.func(),类实例.func() 静态方法(@staticmethod) 静态方法是不需要类(cls)和类实例(self)参数的。所以它的使用场景是:和类有关系的功能但在运行时又不需要实例和类参与的情况下需要用到静态方法。比如封装一个工具类,一般情况下都可以采用静态方法形式。 静态方法的优点: 代码可读性好:看到该标签就知道这个方法并不需要依赖对象本身的状态。 节省内存空间,既然是与类实例无关自然就不用创建类实例对象。 属性方法(@property) 添加@property标签,表示将一个普通函数变成一个类属性,只读的 https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000

全局变量 局部变量

二次信任 提交于 2020-03-22 08:01:22
全局变量 大写 局部变量 小写 1、函数内部的变量名如果第一次出现,且出现在=前面,即被视为定义一个局部变量,不管全局域中有没有用到该变量名,函数中使用的将是局部变量,例如: num = 100 def func(): num = 123 print(num) func() #输出: 123 说明函数中定义的num是一个局部变量,会将全局变量覆盖。再例如: num = 100 def func(): num += 100 print(num) func() #输出: UnboundLocalError: local variable 'num' referenced before assignment 错误提示局部变量num在赋值前被应用,也就是该变量没有定义就使用它,由此再次证明了这里定义了一个局部变量,而不是使用的全局的num。 总结:函数内部的变量名如果第一次出现,且出现在=前面,即被视为定义一个局部变量。 Python makes educated guesses on whether variables are local or global. It assumes that any variable assigned a value in a function is local. From: https://www.tutorialspoint.com/python

python面向对象之方法

a 夏天 提交于 2020-03-22 08:01:05
类成员:字段+方法+属性 字段:普通(实例对象,每个对象保存一次)+静态(全局变量,只保存一次,所有方法共享) 方法:普通方法(实例方法:self.fun())+类方法(@classmathod)+静态方法(所有方法分类) 属性:方法属性 #1普通方法:(使用较多) #encoding=utf-8 class Foo: def __init__(self, name): self.name = name def ord_func(self): """ 定义普通方法,至少有一个self参数 """ # print self.name print u'普通方法' #2类方法:(不能使用实例) @classmethod def class_func(cls): """ 定义类方法,至少有一个cls参数 """ print u'类方法' #3静态方法:(将分类)(不能使用实例) @staticmethod def static_func(): """ 定义静态方法 ,无默认参数""" print u'静态方法' # 调用普通方法:实例+.+方法 f = Foo("gloryroad") f.ord_func() # 调用类方法:类+.+方法 Foo.class_func() # 调用静态方法: Foo.static_func() 实例: 将两个文件操作方法,一个改成类方法,一个改成静态方法

days-2

随声附和 提交于 2020-03-22 07:48:17
文件和异常 实际开发中常常会遇到对数据进行 持久化 操作的场景,而实现数据持久化最直接简单的方式就是将数据保存到文件中。说到“文件”这个词,可能需要先科普一下关于 文件系统 的知识,但是这里我们并不浪费笔墨介绍这个概念,请大家自行通过维基百科进行了解。 在Python中实现文件的读写操作其实非常简单,通过Python内置的 open 函数,我们可以指定文件名、操作模式、编码信息等来获得操作文件的对象,接下来就可以对文件进行读写操作了。这里所说的操作模式是指要打开什么样的文件(字符文件还是二进制文件)以及做什么样的操作(读、写还是追加),具体的如下表所示。 操作模式 具体含义 'r' 读取 (默认) 'w' 写入(会先截断之前的内容) 'x' 写入,如果文件已经存在会产生异常 'a' 追加,将内容写入到已有文件的末尾 'b' 二进制模式 't' 文本模式(默认) '+' 更新(既可以读又可以写) 下面这张图来自于 菜鸟教程 网站,它展示了如果根据应用程序的需要来设置操作模式。 读写文本文件 读取文本文件时,需要在使用 open 函数时指定好带路径的文件名(可以使用相对路径或绝对路径)并将文件模式设置为 'r' (如果不指定,默认值也是 'r' ),然后通过 encoding 参数指定编码(如果不指定,默认值是None,那么在读取文件时使用的是操作系统默认的编码)

模块和常用内置模块

故事扮演 提交于 2020-03-22 07:31:07
什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码(.py文件) 2 已被编译为共享库或DLL的C或C++扩展 3 包好一组模块的包 4 使用C编写并链接到python解释器的内置模块 为何要使用模块? 如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。 随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用, 模块的导入和使用 模块的导入应该在程序开始的地方。 常用语法 我们可以在py文件中按照如下方式导入模块: import a from xx import b 当然还可以再导入模块的时候给模块起别名 from xx import heiheihei as yue __name__ 当做脚本运行: __name__ 等于'__main__' 当做模块导入: __name__= 模块名

[LeetCode in Python] 692 (M) top k frequent words 前K个高频单词

扶醉桌前 提交于 2020-03-22 03:56:13
题目: https://leetcode-cn.com/problems/top-k-frequent-words/ 给一非空的单词列表,返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。 示例 1: 输入: ["i", "love", "leetcode", "i", "love", "coding"], k = 2 输出: ["i", "love"] 解析: "i" 和 "love" 为出现次数最多的两个单词,均为2次。 注意,按字母顺序 "i" 在 "love" 之前。 示例 2: 输入: ["the", "day", "is", "sunny", "the", "the", "the", "sunny", "is", "is"], k = 4 输出: ["the", "is", "sunny", "day"] 解析: "the", "is", "sunny" 和 "day" 是出现次数最多的四个单词, 出现次数依次为 4, 3, 2 和 1 次。 注意: 假定 k 总为有效值, 1 ≤ k ≤ 集合元素数。 输入的单词均由小写字母组成。 解题思路 python自带最小堆的实现heapq heapq有取top k的函数heapq.nlargest(n, iterable[, key]))

python random模块

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-22 02:34:40
random 模块函数简介 choice() 从序列中获取一个随机元素。list, tuple, string都属于sequence #随机取一个数 choice([1, 2, 3, 5, 9]) randint() 用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b print random.randint(12,20) #生成的随机数n: 12 <= n <= 20 print random.randint(20,20) #结果永远是20 #print random.randint(20, 10) #该语句是错误的。下限必须小于上限。 random() 用于生成一个0到1的随机符点数: 0 <= n < 1.0 uniform() random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成的随机数n: a <= n <= b。如果 a <b, 则 b <= n <= a。 print random.uniform(10,20) print random.uniform(20,10) #---- 结果(不同机器上的结果不一样) #18.7356606526 #12.5798298022 randrange() random

第四周 day4 python学习笔记

不羁岁月 提交于 2020-03-22 00:02:31
关于装饰器的更多信息可以参考 http://egon09.blog.51cto.com/9161406/1836763 1.装饰器Decorator 装饰器:本质上是函数,(装饰其他函数),就是为其他函数添加附加功能 原则:不能修改被装饰函数的源代码;不能修改被装饰函数的调用方式 #实现装饰器的知识储备: 1.函数即变量 2.高阶函数,有两种方式: (1)把一个函数名当做实参传递给另一个函数(在不修改被装饰函数源代码的情况下为其添加功能) (2)返回值中包含函数名(不修改函数调用的方式) 3.嵌套函数 高阶函数+嵌套函数==》装饰器 import time #计算一个函数的运行时间的装饰器 def timer(func): def wrapper(*kargs,**kwargs): start_time=time.time() func() end_time=time.time() print("the func runtime is %s"%(end_time-start_time)) return wrapper @timer def test1(): time.sleep(3) print("in the test1....") test1() #高阶函数 def bar(): print("in the bar...") def test(func): print(func

Python lambda介绍

妖精的绣舞 提交于 2020-03-21 23:39:23
  在学习python的过程中,lambda的语法时常会使人感到困惑,lambda是什么,为什么要使用lambda,是不是必须使用lambda?   下面就上面的问题进行一下解答。   1、lambda是什么?     看个例子: g = lambda x:x+1      看一下执行的结果:    g(1)   >>>2   g(2)   >>>3   当然,你也可以这样使用:   lambda x:x+1(1)   >>>2      可以这样认为,lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数体,用函数来表示为: def g(x): return x+1      非常容易理解,在这里lambda简化了函数定义的书写形式。是代码更为简洁,但是使用函数的定义方式更为直观,易理解。   Python中,也有几个定义好的全局函数方便使用的,filter, map, reduce   >>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27] >>> >>> print filter(lambda x: x % 3 == 0, foo) [18, 9, 24, 12, 27] >>> >>> print map(lambda x: x * 2 + 10, foo) [14, 46, 28, 54, 44, 58, 26