python函数

python流程控制

青春壹個敷衍的年華 提交于 2020-03-29 16:23:47
流程控制概念 什么是流程控制? 所谓的流程控制是计算机运算领域的用语意指在程序运行时个别的指令(或是陈述 子程序)运行或求值的顺序不论是在声明式编程语言还是函数式编程语言都有类似的概念 关于声明式编程语言和函数式编程语言详解 以上是官方的解释,我们列举一个现实中的实例来具体说明一下 假如把写程序比做走路,那我们到现在为止,一直走的都是直路,还没遇到过分叉口,想象现实中,你遇到了分叉口,然后你决定往哪拐必然是有所动机的。你要判断那条岔路是你真正要走的路,如果我们想让程序也能处理这样的判断怎么办? 很简单,只需要在程序里预设一些条件判断语句,满足哪个条件,就走哪条岔路。这个过程就叫流程控制。 if...else 语句 Python的条件和循环语句,决定了程序的控制流程,体现结构的多样性。须重要理解,if、while、for以及与它们相搭配的 else、 elif、break、continue和pass语句 详解 if语句 Python中的if子句由三部分组成:关键字本身、用于判断结果真假的条件表达式以及当表达式为真或者非零时执行的代码块。if 语句的语法如下: if 执行条件: 执行体 if语句有三种形式: 单分支 if 条件: 满足条件后要执行的代码 双分支 语法: if 条件: 满足条件执行代码 else: if条件不满足就走这段 实例: Name = 'yefei' if

python中对象的可变与不可变

末鹿安然 提交于 2020-03-29 13:40:49
在python中一切皆对象,对象是对数据的抽象。 所有对象有三个要素:类型、标识、值。类型决定对象可以支持哪些操作;标识指的是对象的内存地址,每个对象有唯一的地址,通过id内建函数可以求出地址;值从字面上看是对象的内容,但是应该理解为对内容的绑定关系。绑定也有说成引用、指向。 对象一旦被创建,它的类型和标识是不变的,根据值的绑定关系是否可变分为可变对象和不可变对象。 如果“值”理解为对象的内容容易产生疑惑。如元组是不可变对象,但是如果元组的元素包含可变对象,那元组的内容是可以改变的,因为可变对象的值可以改变。 那元组为什么说是不可变的对象,理由是元组对已经绑定的可变对象的绑定关系是不可变的,就是元组里的索引一旦绑定了一个对象,就不能修改这个绑定,不能再将这个索引绑定到其它对象,同样就容易理解可变对象了,可变对象值可变指的是内容的绑定关系是可变的,如列表,列表的索引所绑定的对象是可以修改的。 通过例子来理解: tuple_a = (1,[1,2,3]) list_a = [1,2,3] tuple_a是一个包含两个元素的元组,有两个索引即tuple_a[0]和tuple_a[1],这两个索引绑定分别整数对象1和列表对象[1,2,3],不可变指的是不能修改tuple_a[0]和tuple_a[1]这两个的绑定关系,这两个索引只能指向已经绑定的1和[1,2,3]这两个对象

python中@property的作用和getter setter的解释

北战南征 提交于 2020-03-29 09:51:18
@property作用: python的@property是python的一种装饰器,是用来修饰方法的。 我们可以使用@property装饰器来创建只读属性,@property装饰器会将方法转换为相同名称的只读属性,可以与所定义的属性配合使用,这样可以防止属性被修改。 1.修饰方法,让方法可以像属性一样访问。 class DataSet(object): @property def method_with_property(self): ##含有@property return 15 def method_without_property(self): ##不含@property return 15 l = DataSet() print(l.method_with_property) # 加了@property后,可以用调用属性的形式来调用方法,后面不需要加()。 print(l.method_without_property()) #没有加@property , 必须使用正常的调用方法的形式,即在后面加()#两个都输出为15。 如果使用property进行修饰后,又在调用的时候,方法后面添加了(), 那么就会显示错误信息:TypeError: 'int' object is not callable,也就是说添加@property 后,这个方法就变成了一个属性,如果后面加入了

Python 52周存钱挑战

喜欢而已 提交于 2020-03-29 02:37:29
主要的算法: 累加算法 ladder_save_money  利用math库的fsum()对列表的全部内容求和以下是全部代码: 1 import math 2 3 ''' 4 52周存钱挑战 5 阶梯式存钱法,挑战人必须每周比上周多存一定数额的钱 6 一年(52周)后,不考虑利息,计算存款 7 ''' 8 9 10 def ladder_save_money(money_per_week, increase_per_week, total_week): 11 """ 12 13 :param increase_per_week: 每周存入金额的增幅 14 :param money_per_week: 首周存入的金额 15 :param total_week: 总计存钱周数 16 :return: total_money_list 每周存款情况 17 :print 每周存款数和存款情况 18 """ 19 20 saved_money_list = [] 21 total_money_list = [] 22 for i in range(total_week): 23 saved_money_list.append(money_per_week) 24 # math库内置函数,对列表内所有所有数字求和 25 # 这里不用简单的 saving = money_per_week +

python基础之常用序列类型(字符串)

微笑、不失礼 提交于 2020-03-29 01:44:19
python中字符串,列表,元组都是常用的数据类型,且都属于序列类型 从字符串说起,顾名思义字符串就是指一串字符,字符通常包括字母,数字,符号。在python中我们使用引号('或")来创建字符串。即创建字符串只要为变量分配一个值即可。例如: a = 'hello ,world!'b = "hello ,world!" 当所要创建的字符串中包含'或"的时候,例如要创建字符串 I love 'python'.此时由如下几种处理方式 a = ' I love "python" 'b = " I love 'python' "c = ' I love \'python\' ' 不难看出当字符串中中包含'或"中的一种时,可以通过另一种作为限定字符串范围的方式。 若字符串中同时存在单引号'和双引号"的时候,因为 ' 和 " 会引起歧义,故我们在它前面插入一个 \ 表示这是一个普通字符,不代表字符串的起始。 至此我们引入一个概念——转义字符:即在字符前加上\,字符就不再代表字符本身的意思,而是被赋予了一种新的解释或功能。 常见的转义字符有: \n 换行 \\ 代表反斜杠 \t 水平制表符 \' 代表一个单引号,同理"也可以这样的方式输出 \b 退格 \0 代表一个空字符 \r 回车 \a 代表系统提示音 注:在python 中若要去掉字符串的转义,只需要在字符串前面加上r即可,例如: >>>a

Python lambda介绍

心已入冬 提交于 2020-03-28 20:29:59
  在学习python的过程中,lambda的语法时常会使人感到困惑,lambda是什么,为什么要使用lambda,是不是必须使用lambda?   下面就上面的问题进行一下解答。   1、lambda是什么?     看个例子:      1 g = lambda x:x+1   看一下执行的结果:    g(1)   >>>2   g(2)   >>>3   当然,你也可以这样使用:   lambda x:x+1(1)   >>>2      可以这样认为,lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数体,用函数来表示为: 1 def g(x): 2 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,

Python 函数的参数传递

十年热恋 提交于 2020-03-28 17:01:17
前言 文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 作者:风,又奈何 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun 背景:一条微博问题: 首先,我们比较熟悉的函数传参的两种方式是: 传值:传入被调函数的是一个实参副本。被调函数中对形参的操作不会影响实参变量; 传引用:传入被调函数的是实参变量的地址,形参的操作就是寻址处理,被调函数中对形参的操作会影响实参变量。 典型的传值、传引用方式如 C 语言,C 语言中的变量 hold 住了一块内存区域。 而 Python 对变量的处理有很大不同。此外,Python 中的函数参数传递是遵循极具 Python 土味的 Call-by-Object(传递对象),也有叫 call-by-object-reference 的(传递对象的引用,或传对象的地址指向),不是 C 传统思维里的传值或传引用。 且听慢慢道来。 首先,Python 中一切皆对象,是的,数字、列表、字典等等啥都是对象。其次,Python 的变量充其量就是对象的一个引用,变量赋值操作 = 其实是把一个名字绑定到对象上,通俗语气讲,变量就是一个标签,一个名字,仅此而已,不像 C 语言那样: a = 5 # a 是对象 5 的一个引用,a 是 5

对python3中pathlib库的Path类的使用详解

╄→尐↘猪︶ㄣ 提交于 2020-03-28 16:57:31
原文连接 https://www.jb51.net/article/148789.htm 1.调用库 ? 1 from pathlib import 2.创建Path对象 ? 1 2 3 4 5 6 7 p = Path( 'D:/python/1.py' ) print (p) #可以这么使用,相当于os.path.join() p1 = Path( 'D:/python' ) p2 = p1 / '123' print (p2) 结果 ? 1 2 D:\python\ 1.py D:\python\ 123 3.Path.cwd() 获取当前路径 ? 1 2 path = Path.cwd() print (path) 结果: ? 1 D:\python 4.Path.stat() 获取当前文件的信息 ? 1 2 p = Path( '1.py' ) print (p.stat()) 结果 ? 1 os.stat_result(st_mode = 33206 , st_ino = 8444249301448143 , st_dev = 2561774433 , st_nlink = 1 , st_uid = 0 , st_gid = 0 , st_size = 4 , st_atime = 1525926554 , st_mtime = 1525926554 , st

模块与包

試著忘記壹切 提交于 2020-03-28 16:18:28
一、模块   1.为什么是模块?   一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。   2.为何要使用模块?   如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。   随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用   3.如何使用模块?   3.1 import #spam.py print('from the spam.py') money=1000 def read1(): print('spam->read1->money',1000) def read2(): print('spam->read2 calling read') read1() def change(): global money money=0   3.1.1 模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行(import语句是可以在程序中的任意位置使用的

Python中*args和**kwargs的区别

亡梦爱人 提交于 2020-03-28 15:25:36
一、*args的使用方法 *args 用来将参数打包成tuple给函数体调用 def args_test(x, y, *args): print(x, y, args) args_test(1,2,3,4,5)1 2 (3, 4, 5) 二、**kwargs的使用方法 **kwargs 打包关键字参数成dict给函数体调用 def kwargs_test(**kwargs): print(kwargs) kwargs_test(a=1, b=2, c=3){'a': 1, 'c': 3, 'b': 2} 三. 参数arg、*args、**kwargs三个参数的位置必须是一定的。必须是(arg,*args,**kwargs)这个顺序,否则程序会报错。 def param_test(arg, *args, **kwargs): print(arg, args, kwargs) param_test(1, 3, 5, a=6, b=9)1 (3, 5) {'b': 9, 'a': 6} 来源: https://www.cnblogs.com/bob-coder/p/11532599.html