1、函数

 函数的本质就是功能的封装。

 函数的作用

  • 提升代码的重复利用率,避免重复开发相同代码
  • 提高程序开发效率
  • 便于程序维护

2、函数定义

def 函数名(参数):
   """
   函数文档
   """
函数功能代码...
函数功能代码... 调用函数:函数名(参数) 形参:声明函数时()中的参数是形参
  形参只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。
  形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。 实参:调用函数时()中的参数是实参,实参可以是常量、变量、表达式、函数等
  实参在函数调用时,必须有确定的值,以便把这些值传送给形参。 函数文档:
  • 函数的作用
  • 函数的参数介绍(个数,数据类型)
  • 函数的返回值(数据和类型)

3、默认参数

def 函数名(形参=默认值,形参=默认值...):
函数功能代码...
函数功能代码...
... 调用函数:
函数名() # 调用函数时所有形参采用默认值操作
函数名(实参,实参...) # 调用时形参使用实参的值而抛弃默认值

4、关键参数

def 函数名(形参=默认值,形参=默认值...):
函数功能代码...
函数功能代码...
... 调用函数:
函数名(形参=实参,形参=实参...)  

5、收集参数

5.1、*args参数

def 函数名(*args):
函数功能代码...
函数功能代码...
... 调用函数:函数名(实参,实参...) 没有数量限制
*args 会把多传入的参数变成一个元组形式

5.2、**kwargs参数

def 函数名(**kwargs):
函数功能代码...
函数功能代码...
... 调用函数: 函数名(形参=实参,形参=实参...) 没有数量限制
*kwargs会把多传入的参数变成一个dict形式

6、函数返回值

return语句的特征:

  • 具有return语句的函数称为具有返回值的函数
  • return可以为当前函数执行完毕返回一个结果,这样的函数调用可以被接受
  • return执行之后,函数则会终止,所有return之后的语句不会被执行
  • 一个函数可以书写多个return语句,但是一般会放入分支结构当中。
  • 一个函数如果需要返回多个数据,需要借助复合数据类型(list,tuple,set,dict)来操作
  • 不带参数值的return语句返回None。
#!/usr/bin/python3

# 可写函数说明
def sum( arg1, arg2 ):
# 返回2个参数的和."
total = arg1 + arg2
print ("函数内 : ", total)
return total; # 调用sum函数
total = sum( 10, 20 );
print ("函数外 : ", total)

7、变量

 全局变量:

在程序的一开始定义的变量称为全局变量,全局变量作用域是整个程序

 局部变量:

在子程序中定义的变量称为局部变量,局部变量作用域是定义该变量的子程序

#!/usr/bin/python3

total = 0; # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):
#返回2个参数的和."
total = arg1 + arg2; # total在这里是局部变量.
print ("函数内是局部变量 : ", total)
return total; #调用sum函数
sum( 10, 20 );
print ("函数外是全局变量 : ", total)

8、匿名函数(lambda)

  lambda的主体是一个表达式,但可对有限的逻辑完成封装。

  lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

res = map(lambda x:x**2,[1,5,7,4,8])
for i in res:
print(i) 执行结果:
1
25
49
16
64

9、递归函数

1.定义:如果一个函数在内部调用自身本身,这个函数就是递归函数。

2.特性:

  • 必须有一个明确的结束条件
  • 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
  • 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
def calc(n):
print(n)
if int(n/2) ==0:
return n
return calc(int(n/2)) calc(10) 输出:
10
5
2
1

二分法查找:

data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]
def binary_search(dataset,find_num):
print(dataset) if len(dataset) >1:
mid = int(len(dataset)/2)
if dataset[mid] == find_num: #find it
print("找到数字",dataset[mid])
elif dataset[mid] > find_num :# 找的数在mid左面
print("\033[31;1m找的数在mid[%s]左面\033[0m" % dataset[mid])
return binary_search(dataset[0:mid], find_num)
else:# 找的数在mid右面
print("\033[32;1m找的数在mid[%s]右面\033[0m" % dataset[mid])
return binary_search(dataset[mid+1:],find_num)
else:
if dataset[0] == find_num: #find it
print("找到数字啦",dataset[0])
else:
print("没的分了,要找的数字[%s]不在列表里" % find_num) binary_search(data,66)

Python开发【第5节】【函数基础】的更多相关文章

  1. Python开发【第一篇】基础题目二

    1 列表题 l1 = [11, 22, 33] l2 = [22, 33, 44] # a. 获取l1 中有,l2中没有的元素 for i in l1: if i not in l2: # b. 获取 ...

  2. Python开发【内置函数篇】re正则表达式

    一.简介 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配.正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎 ...

  3. Python开发【数据结构】:基础

    数据结构 什么是数据结构? 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中. 比如:列表.集合与字典等都是一种数据结构 N.Wirth: “程序=数据结构+算法” 列表 列表:在其他编程 ...

  4. python开发_python中的函数定义

    下面是我做的几个用列: #python中的函数定义,使用和传参 def_str = '''\ python中的函数以如下形式声明: def 函数名称([参数1,参数2,参数3......]): 执行语 ...

  5. python开发笔记之zip()函数用法详解

    今天分享一篇关于python下的zip()函数用法. zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素按顺序组合成一个tuple,每个tuple中包含的是原 ...

  6. Python开发【第一篇】基础题目一

    1.求1-2+3-4+5.....99的所有数的和 n = 1 s = 0 while n<100: temp = n%2 if temp == 0: #偶数 s = s-n else: s = ...

  7. Python开发【Django】:基础

    Django基本配置 Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Se ...

  8. Python开发笔记之-字符串函数

    1.首字母大写 >>> s = 'yuanzhumuban' >>> s.capitalize() 'yuanzhumuban'  2.replace,替换 > ...

  9. python开发的学生管理系统

    python开发的学生管理系统(基础版) #定义一个函数,显示可以使用的功能列表给用户 def showInfo(): print("-"*30) print(" 学生管 ...

  10. python开发基础04-函数、递归、匿名函数、高阶函数、装饰器

    匿名函数 lamba lambda x,y,z=1:x+y+z 匿名就是没有名字 def func(x,y,z=1): return x+y+z 匿名 lambda x,y,z=1:x+y+z #与函 ...

随机推荐

  1. pycharm 破解

    亲测有效! http://blog.lanyus.com/archives/174.html 备注: 注册码破解链接:http://idea.lanyus.com/ 将下载的jar包放入PyCharm ...

  2. WC2007 石头剪刀布 数学+最小费用最大流

    题面: 有N个人参加一场比赛,赛程规定任意两个人之间都要进行一场比赛:这样总共有N*(N-1)/2场比赛.比赛已经进行了一部分,我们想知道在极端情况下,比赛结束后最多会发生多少剪刀石头布情况.即给出已 ...

  3. CF1029E Tree with Small Distances

    题目描述 给定一棵树.要求往树中加入一些边使得从1到其他节点的距离至多是2 . 输出加入边的最小数量.(边全部都是无向的) 题解:好多人都说是贪心,但是我写的是树形dp. (这道题实在太像小胖守皇宫了 ...

  4. php扩展1:filp/whoops(用于调试,方便定位错误点)

    一.composer下载filp/whoops: 1.在composer.json中添加:"filp/whoops": "*",如下所示: 2.执行compos ...

  5. docker安装配置lnmp

    一.安装配置docker 1.下载docker:yum install -y docker 2.设置docker远程镜像地址为国内路径:curl -sSL https://get.daocloud.i ...

  6. python 列表(二)

     列表的其他操作 count 用于统计列表中某个元素出现的次数 Eg: extend 把一个列表添加到另一个列表里面 Index 输出元素的位置即根据内容索引位置 Reverse 把列表元素的位置倒过 ...

  7. 【03】HTML head 头部分的标签说明 和 手机头部标签说明

    HTML head 头部分的标签.元素有很多,涉及到浏览器对网页的渲染,SEO 等等,而各个浏览器内核以及各个国内浏览器厂商都有些自己的标签元素,这就造成了很多差异性.移动互联网时代,head 头部结 ...

  8. 【BZOJ3669】魔法森林(LCT)

    题意:有一张无向图,每条边有两个权值.求选取一些边使1和n连通,且max(a[i])+max(b[i])最小 2<=n<=50,000 0<=m<=100,000 1<= ...

  9. Codeforces 651E Table Compression【并查集】

    题目链接: http://codeforces.com/problemset/problem/650/C 题意: 给定n*m的矩阵,要求用最小的数表示每个元素,其中各行各列的大小关系保持不变. 分析: ...

  10. [bzoj2506]calc_分块处理

    calc bzoj-2506 题目大意:给一个长度为n的非负整数序列A1,A2,…,An.现有m个询问,每次询问给出l,r,p,k,问满足l<=i<=r且Ai mod p = k的值i的个 ...