一、变量

变量是记录一系列状态变化的量

1.变量分为可变类型与不可变类型——可变 与不可变是根据变量在内存中占据的位置

可变类型:列表list[ ]、字典dicta{ }

不可变类型:字符串str、数字int、元组()

2.按照访问方式可分为顺序访问、映射访问和直接访问

直接访问:数字int

映射访问:字典dict{ }

顺序访问:字符串str、列表list[ ]、元组()

二、集合

特征:由不同的元素组成,元素无序,集合中的元素必须是不可变类型

1.集合定义:set()

s = set('hello')
print(s)
#输出结果为{'o','h','l','e'},无序,无重

其中()中必须为可迭代类型

2.常用方法

  • 添加元素
add() #向集合中添加元素
  • 清空集合
clear() #清空集合
  • 删除集合中的元素
pop()#随机删除某个元素
remove()#指定某个值删除,当不存在要删除的元素时,编译报错
discard()#指定某个值删除,当不存在要删除的元素时,编译不报错

3.常用操作

  • 求交集
s1.intersection(s2) #求s1与s2的交集
  • 求并集
s1.union(s2) #求s1与s2的并集
  • 求差集
s1.difference(s2) #s1中有,s2中没有的元素

s2.difference(s1) #反之
  • 判断
s1.difference_update(s2)  #等价于s1 = s1-s2

s1.isdisjoint(s2)  #交集是否为空集

s1.issubset(s2)  #s1是否为s2的子集,反之,issuperset()判断是否为父集

三、字符串格式化

%s固定类型,用于传值,传多个值是(,,,),中间用逗号分隔

%d——传数字,%s——可用于传一切数据类型

打印浮点数:

%.2f  #打印小数点后2位

打印百分号:%%

字典的传值:

%(name)d     %(age)s  #传一个字典,key=name,key=age

四、函数

形式:

def    test()
关键字 函数名 形参
代码块
return
返回值

函数的定义主要有如下要点:

  • def:表示函数的关键字
  • 函数名:函数的名称,日后根据函数名调用函数
  • 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
  • 参数:为函数体提供数据
  • 返回值:当函数执行完毕后,可以给调用者返回数据。

关于返回值:

  • 无返回值:返回一个None
  • 有一个返回值:返回object
  • 多个返回值:返回一个tuple

函数的有三中不同的参数:

  • 普通参数
  • 默认参数
  • 动态参数
# ######### 定义函数 ######### 

# name 叫做函数func的形式参数,简称:形参
def func(name):
print name # ######### 执行函数 #########
# 'wupeiqi' 叫做函数func的实际参数,简称:实参
func('无名') 普通参数
def func(name, age = 18):

    print "%s:%s" %(name,age)

# 指定参数
func('无名', 19)
# 使用默认参数
func('有名') 注:默认参数需要放在参数列表最后 默认参数

参数的传值时位置参数,关键字参数的使用规则:

  • 位置参数必须一一对应,缺一不行,多一也不行
  • 一个参数不能传两个值
  • 若位置参数与关键字参数混合使用,则位置参数必须在关键字参数左边
  • 多组参数(位置参数,*args,**kwargs)对应形式为(位置参数,列表,字典)

五、局部变量与全局变量

局部变量;在子程序中定义的变量

全局变量;在整个文件中任何位置均可调用到

变量使用的就近原则

关于global关键字:

如果函数中无global关键字,优先读取局部变量,若无局部变量,则只能读取全局变量,也就无法对其赋值或者修改。

当有global关键字时,global把全局变量拿到函数中,变成了该函数的变量,但对其他函数来讲,仍然是全局变量,但全局变量的值可以在上一个函数中被修改。

为了以后避免变量重名问题,全局变量一律大写,局部变量小写。

函数执行顺序

六、递归

函数自己调用自己,但必须有个明确的结束条件。

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

举个例子,我们来计算阶乘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)! x n = fact(n-1) x n

所以,fact(n)可以表示为n x fact(n-1),只有n=1时需要特殊处理。

于是,fact(n)用递归的方式写出来就是:

def fact(n):
if n==1:
return 1
return n * fact(n - 1)

递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。

使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。

解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。

尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。

尾递归调用时,如果做了优化,栈不会增长,因此,无论多少次调用也不会导致栈溢出

Python进阶【第四篇】函数的更多相关文章

  1. Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究

    Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究 一丶反射 什么是反射: ​ 反射的概念是由Smith在1982年首次提出的 ...

  2. Python进阶(十四)----空间角度研究类,类与类之间的关系

    Python进阶(十四)----空间角度研究类,类与类之间的关系 一丶从空间角度研究类 对象操作对象属性 class A(): address = '沙河' def __init__(self, na ...

  3. Python进阶(五)----内置函数Ⅱ 和 闭包

    Python进阶(五)----内置函数Ⅱ 和 闭包 一丶内置函数Ⅱ ####内置函数#### 特别重要,反复练习 ###print() 打印输入 #sep 设定分隔符 # end 默认是换行可以打印到 ...

  4. [Python笔记]第四篇:内置函数

    本篇主要内容:内置函数 函数 参考:https://docs.python.org/3.5/library/functions.html 内置函数列表 一.数学运算类 abs(x)求绝对值 >& ...

  5. Python【第四篇】函数、内置函数、递归、装饰器、生成器和迭代器

    一.函数 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 1.定义 def 函数名(参数): ...

  6. python开发第四篇:函数(1)

    函数 阅读目录 一 函数知识体系 二 函数基础 三 函数对象.函数嵌套.名称空间与作用域.装饰器 四 迭代器.生成器.面向过程编程 五 三元表达式.列表推导式.生成器表达式.递归.匿名函数.内置函数 ...

  7. 【python自动化第四篇:python入门进阶】

    今天的课程总结: 装饰器 迭代器&生成器 json&pickle实现数据的序列化 软件目录结构规范 一.装饰器 装饰器的本质是函数,起目的就是用来为其它函数增加附加功能 原则:不能修改 ...

  8. python基础-第四篇-4.1内置函数

    lambda表达式 lambda表达式是对简单函数的精简化表达 语法结构:函数名 = lambda:运算表达式 def f1(a): a = a + 1 return a ret = f1(1) pr ...

  9. Python 学习 第四篇:动态类型模型

    Python的变量不用声明,赋值之后就可以直接使用,类型是在运行过程中自动确定的,这就是动态类型模型.该模型把变量和对象设计成两个不同的实体,对象是存储数据的地方,对象的类型是由初始值自动决定的,而变 ...

  10. Python进阶【第二篇】编写Python代码

    一.第一句Python代码——Hello Word 在 /home/dev/ 目录下创建 hello.py 文件,内容如下: print "hello,world" 执行 hell ...

随机推荐

  1. Html-根据不同的分辨率设置不同的背景图片

    @media only screen and (min-width: 1024px)     //当分辨率width >= 1024px 时使用1.jpg作为背景图片 {             ...

  2. vue-preview的使用

    使用vue-preview做图片缩率图1.安装 npm i vue-preview -S2.如果使用vue-cli生成的项目,需要修改webpack.base.conf.js文件中的loaders,添 ...

  3. 递归与非递归打印乘法口诀表--Scala(指令式、函数式思维练习)

    object Test extends App { def printMultiTable() { var i = 1 while (i < 10) { var j = 1 while (j & ...

  4. (转)Thread的中断机制(interrupt)

    先看收集了别人的文章,全面的了解下java的中断: 中断线程 线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡.还是等待新的 ...

  5. 产品设计教程:wireframe,prototype,mockup到底有何不同?

    wireframe,prototype,mockup 三者经常被混用,很多人把三者都叫原型,真的是这样吗? 我们来看看三者到底有何不同.先来做一道选择题: 从这张图可以看出,prototype 和其他 ...

  6. jenkins 添加 证书凭证Credentials

    jenkins 添加 证书凭证Credentials 大家都知道jenkins在拉取git项目代码的时候,如果没有配置 “证书凭证Credentials” 或者配置的不对, 就会出现红色报错,最终导致 ...

  7. 用Sample Flex Viewer框架创建GeoWeb应用程序

    ArcGIS FlexView 开发指南(中文) 在线预览:https://wenku.baidu.com/view/4c08cc78168884868762d616.html idea : http ...

  8. 安装FusionInsight

    1.在华为平台上下载整体客户端,不建议下载单个组件客户端,后期关联测试还是要装上的.   2.下载后需要将服务器上的客户端拷贝到本地.打开xShell,新建会话,登陆本地虚拟机上的Linux系统(19 ...

  9. js中var a=new Object()和var a={}有什么区别吗?

    应该是没有区别的,两者都是生成一个默认的Object对象.js和其它语言一样,一切对象的基类都是Object,所以,new Object()和简易的{}是同样的空对象,就是默认的对象.本来我以为{}应 ...

  10. Ajax技术之使用XMLHttpRequest对象(一)【初始化XMLHttpRequest对象】

    在初始化XMLHttpRequest对象时要考虑两种情况,一种是IE浏览器,另一种是非IE浏览器.在IE浏览器中要把XMLHttpRequest实例化一个ActiveX对象 http_request ...