一、函数的定义

def test(x)
"The Function definitions"
x +=
return x

def:定义函数的关键字

test:函数名

():定义形参

“”:文档描述

x += 1:泛指代码块或程序处理逻辑

return:定义返回值(出现return,函数结束)

调用运行时,可带参数也可不带:函数()

优点:代码重用,保持一致性易维护,可扩展性

二、函数和过程

1.过程即没有返回值的函数,由于Python中没有使用return返回值时,会返回None,所以过程在Python中也是函数

2.返回值

def test01():
pass
def test02():
return 0
def test03():
return 0, 10, 'hello', ['kobe', 'lbj'], {'Team': 'lakers'}
t1 = test01()
t2 = test02()
t3 = test03()
print(t1,t2,t3)

返回值数为0,返回None,返回值数为1,返回object,返回值数>1,返回tuple。

三、函数参数

1.形参和实参

def calc(x,y):#x,y为形参
res = x ** y
return res
t = calc(1,2)#1,2为实参
print(t)

  形参只在函数调用时才分配内存单元,调用结束后立即释放,因此形参只在函数内部有效

  实参可以是常量、变量、表达式、函数,在函数调用时,实在必须有确定的值以便把值传给形参

2.位置参数和关键字参数

def test(x,y,z):
print(x,y,z)
test(1,2,3)#位置参数
test(x=1,z=3,y=2)#关键字参数
test(1,y=2,z=3)

  位置参数必须一一对应,不能多或少,关键字参数无须一一对应,也不能多或少,二者可以混用,但位置参数必须在关键字参数左边否则报错。

3.默认参数

def power(x, n=2):#n为默认参数
s = 1
while n > 0:
n = n - 1
s = s * x
print(s)
return(s) power(4,4)

  默认参数可以降低函数调用的难度,但设置的时候要注意,不能用可变对象

def add_end(L=[]):
L.append('END')
return L # print(add_end([123,456]))
print(add_end())
print(add_end())
print(add_end())

4.参数组

def test(x,*args,**kwargs):
print(x)
print(args)
print(kwargs)
test(1,2,3,4,5,y=12,z=22)

  *args传的是列表或元组,**kwargs传的是字典

(1)定义可变参数用*

def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
s = calc(1,2,3)
print(s)
num = [1,2,3,4]
s = calc(*num)
print(s)

(2)定义关键字参数用**

def person(name, age, **kw):
print("name:", name, "age:", age, "other:", kw)
person("hechouzi", 25,city="jiangsu",height=183)
extra = {"city":"jiangsu","height":183}
person("heheh",12,**extra)

四、全局变量和局部变量

  全局变量全部大写,局部变量全部小写

  函数中如果没有global参数,且没有声明局部变量,函数内部可以调用全局变量,但不可修改

  函数中如果有global参数,可以对全局变量进行修改

  函数中如果定义了局部变量,则优先读取局部变量

NAME = "KOBE"
def change_name():
global NAME
name = "LBJ"
print("Who am i:",NAME)
print("Who are you:",name)
NAME = "BYRANT"
print("Now,who am i:",NAME)
print("Now,who are you:",name)
change_name()
print(NAME)
print(name)#报错,因为是局部变量

五、前向引用

  “函数即变量”

def test1():
print("from test1")
test2()
def test2():
print("from test2")
test1()

前向引用就是在定义函数之前引用

六、嵌套函数和作用域

def test1():
name = "Jordan" def test2():
name = "Kobe" def test3(): print(name)
return test3 return test2
func = test1
print(func)
func()()()

七、递归调用

1.递归特性

  1.必须有一个明确的结束条件;2.进入深一层的递归,问题规模要比上一层有所减少;3.递归效率不高,递归层次过高会导致栈溢出。

(图侵删)

def calc(n):
if int(n/2)==0:
return n
n = int(n/2)
re = calc(n)
return re
print(calc(100))

2.尾递归优化

  如阶乘函数,当所求阶乘数太大,会导致栈溢出。

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

  尾调用就是指在一个函数的最后一步调用另外一个函数,以此来实现尾递归优化

def fact(n):
return fact_iter(n,1);
def fact_iter(num,res):
if num == 1:
return res
return fact_iter(num - 1,num*res)
print(fact(5))

  尾调用优化可以不要保存外层函数的调用记录,可以防止栈溢出,但大多数编程语言没有针对尾调用优化,Python也没有。

八、匿名函数

calc = lambda n:n**n
print(calc(10))

  匿名函数lambda主要和其他函数搭配使用

九、函数式编程

1.函数式编程

  函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。

函数式编程的一个特点是允许把函数本身作为参数传给另一个函数,还允许返回一个函数,因为Python允许使用变量,所以Python不是纯函数式编程语言。

2.高阶函数

  可以接收另外一个函数做变量的函数

def add(x,y,f):
return (f(x)+f(y))
print(add(-1,6,abs))

  高阶函数满足两个特性:(1)传入参数是一个函数名;(2)返回值是一个函数名

3.map函数和reduce函数

(1)map函数

  接收两个参数,一个是函数,一个是可迭代对象

def f(x):
return x*x
print(list(map(f,[1,2,3,4,5])))
L = []
for i in [1,2,3,4,5]:
L.append(i*i)
print(L)

  相同功能可以用for实现,但map函数把运算规则抽象了,可以计算任意复杂函数。

  map函数结合匿名函数的使用

print(list(map(lambda x:x*x,range(5))))

(2)reduce函数

  把一个函数作用到一个序列[x1,x2,x3,...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积运算。

from functools import reduce
def f(x,y):
return x*100+y*10
print(reduce(f,[1,2,3,4,5]))

4.filter函数

  与map函数类似,filter函数也要接收一个函数和一个序列,filter函数把传入的函数依次作用于每一个元素,然后根据返回值是True和False来决定保留还是丢弃。

def is_odd(x):
return x % 2 == 1
print(list(filter(is_odd,[1,2,3,4,5,6,7,8])))

十、内置函数

https://docs.python.org/3/library/functions.html?highlight=built#ascii

1.abs()  

  取绝对值

2.all() 

  把所有元素做bool运算,如果都是True则返回True

3.any()  

  把所有元素做bool运算,只要有一个是True就返回True

4.bin()/hex()/oct()

把十进制数转换成二进制/十六进制/八进制数

5.bool()  

  判断bool值

6.bytes()  

  把字符串转换成字节,需指定编码

#bytes()函数
a = bytes('abc', 'utf-8')
print(a)
b = bytes(1)
print(b)
c = bytes([2,3,6,8])
print(c)

7.chr()/ord()  

  chr(),输入ASCII码表中的编号,输出对应字符;ord(),输入字符,显示字符对应的ASCII码表中的编号

8.dir()  

  打印某个对象下的方法

9.divmod()  

  取得商和余数,可以用在分页功能

10.enumerate()  

  遍历序列中的元素及下标

test = [11,22,33,44]
for i,j in enumerate(test):
print(i,j)

11.eval()  

  将字符串str当成有效的表达式来求值并返回计算结果;把字符串中的数据结构提取出来

12.zip()  

  拉链

a = (1,2,3)
b = ("a","b","c")
print(list(zip(a,b))

13.max()/min()  

  求取最大值和最小值

14.pow()  

  输入两个参数是求取次幂,输入三个参数是求次幂后取余

15.reversed()    

  反转

16.round()  

  四舍五入 ,可以指定小数位

17.sorted()  

  排序

18.sum()  

  求和

19.type()  

  查看类型

20.__import__()  

  导入文件

Python开发——5.函数的更多相关文章

  1. 06 python开发之函数

    06 python开发之函数 目录 06 python开发之函数 6 函数 6.1 基本使用 6.1.1 基本概念 6.1.2 定义函数 6.2 调用函数与函数返回值 6.2.1 调用函数三种形式 6 ...

  2. python开发之函数

    转:https://www.tuicool.com/wx/vEVrqeR 06 python开发之函数 博客园精华区12-12 20:56 06 python开发之函数 目录 6.2 调用函数与函数返 ...

  3. python开发_函数的参数传递

    在这个用例中,我们要讨论的是关于函数的传参问题 我所使用的python版本为3.3.2 对于函数: def fun(arg): print(arg) def main(): fun('hello,Ho ...

  4. python开发初识函数:函数定义,返回值,参数

    一,函数的定义 1,函数mylen叫做函数名 #函数名 #必须由字母下划线数字组成,不能是关键字,不能是数字开头 #函数名还是要有一定的意义能够简单说明函数的功能 2,def是关键字 (define) ...

  5. Python全栈开发之路 【第四篇】:Python基础之函数

    本节内容 函数def: 1.位置参数,默认参数 2.位置参数,关键参数 3.如果参数中出现 *users,传递的参数就可以不再是固定的个数, 传过来的所有元素进行打包成元组 *args,**kwarg ...

  6. python函数,模块及eclipse配置python开发环境

    一.eclipse的使用 1.作用 (1)最好用的IDE (2)可调式debug (3)查看可执行过程 (4)可查看源代码 2.安装eclipse及配置 目录安装Pythonpython for ec ...

  7. python全栈开发笔记---------函数

    一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因 ...

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

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

  9. Python开发【第五篇】:函数

    1. 函数   函数是组织好的,可重复使用的,用来实现单一,或相关功能的代码块.   函数分为 Python 程序内置函数,用户自定义的函数.将代码定义为函数,有如下好处: 代码重用(某个特定功能复用 ...

随机推荐

  1. rabbitmq (四) 路由

    上文讲的是广播类型fanout 本章讲 direct和topic. 当使用广播类型fanout的时候: routingKey字段不起作用. direct:精确匹配 routingKey:匹配一个单词, ...

  2. django之Models和ORM

    ORM Object Relational Mapping,简称ORM,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久 ...

  3. gentoo Cataclysm - Dark Days Ahead

    gentoo 中安装 Cataclysm - Dark Days Ahead,使用web 下载稳定版的安装包,使用 tar 进行解压. 安装需要共享库:sdl2-mixer, 未完待续

  4. HTML5 元素文字超出部分显示省略号(支持多行),兼容几乎所有常用浏览器

    1,公共样式,在公共的 CSS 文件中加入以下内容  /* 超出部分显示省略号,支持多行 */ .text-ells:before { content: ''; float: left; width: ...

  5. CentOS(十二)--crontab命令的使用方法

    crontab命令常见于Unix和Linux的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行. 在 ...

  6. ajax单删

    通过点击事件获取相应数据的id,将id传到的控制器,根据id执行删除的sql语句,执行官删除:同时ajax的有点就是快捷方便,无刷新,增强用户的体验. <?php namespace app\i ...

  7. jq动画分析1

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. Matplotlib--基本使用

    基础应用 import matplotlib.pyplot as plt import numpy as np #使用np.linspace定义x:范围是(-1,1);个数是50. 仿真一维数据组(x ...

  9. Delphi TXLSReadWriteII 导出EXCEL

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  10. CentOS7下安装Gitlab社区版【安装步骤、IP改域名、修改端口】

    这两天一直在给公司的服务器配置Gitlab(10.5.4).过程很是痛苦,所以把过程记录一下. 1.安装CentOS7 从官网上下载了最新版CentOS-7-x86_64-DVD-1708.iso.用 ...