python中函数的定义:

 def test (x,y):
"The function definitions"
z = x**y
return z """
def:定义函数的关键字
test:函数名
():内可定义形参
z=x**y:函数功能实现代码块
return:运算结果返回
"""

一. 函数的特征

    1. 当python中函数通过return语句返回多个值时,默认以元组方式打包后一次性返回。

2. 位置参数调用方式:实参与形参位置一一对应;如test(2,3);

关键字参数调用方式:实参与形参位置不必一一对应,但需指定形参名与对应的实参值;如test(y=3,x=2);

当两种调用方式混合使用时,位置参数调用必须位于关键字参数调用后面;如test(2,y=3)。

3. 默认参数:在函数定义时可以为其中某一参数赋予默认值;当调用该函数时,可以为默认参数传入实参,也可以使用默认值。如def test(x,type="mysql")。

4. 参数组:* 列表,** 字典。

 def test (x,*args):
print(x)
print(args)
print(args[0]) test(1,2,3,4,5,6)
print("--"*20)
test(1,[2,3,4,5,6])
print("--"*20)
test(1,*[2,3,4,5,6]) """
运行结果:
1
(2, 3, 4, 5, 6)
2
----------------------------------------
1
([2, 3, 4, 5, 6],)
[2, 3, 4, 5, 6]
----------------------------------------
1
(2, 3, 4, 5, 6)
2
"""
 def test (x,**kwargs):
print(x)
print(kwargs) test(1,y=2,z=3)
print("--"*20)
test(1,**{"y":2,"z":3}) """
运行结果:
1
{'y': 2, 'z': 3}
----------------------------------------
1
{'y': 2, 'z': 3}
"""
 def test (x,*args,**kwargs):
print(x)
print(args)
print(kwargs) test(11,22,33,44,y=55,z=66)
print("--"*20)
test(11,*[22,33,44],**{"y":55,"z":66}) """
运行结果:
11
(22, 33, 44)
{'y': 55, 'z': 66}
----------------------------------------
11
(22, 33, 44)
{'y': 55, 'z': 66}
"""
 def test1(name,age,gender):
print(name)
print(age)
print(gender)
def test2(*args, **kwargs):
test1(*args, **kwargs) #args=("alex",18,"male") kwargs={}
test2("alex",18,"male") """
运行结果:
alex
18
male
"""     

5. 局部变量与全局变量

在子函数中定义的变量称为局部变量,局部变量只在子函数运行期间有效;在主函数中定义的变量称为全局变量,全局变量在整个程序运行期间都有效;

在子函数中声明、调用与修改全局变量,global 全局变量名;在子函数中声明、调用与修改上一级函数中变量,nonlocal 变量名;

 daxia = "令狐冲"
print(daxia) #在主函数中,访问全局变量daxia对应的值
def test1():
global daxia
daxia = "风清扬" #在子函数中,修改并访问全局变量值
test1()
print(daxia) #检查test1修改后全局变量值 """
运行结果:
令狐冲
风清扬
"""
 def test1():
daxia = "令狐冲"
print(daxia) #在子函数内部,访问局部变量daxia对应的值
def test2():
nonlocal daxia
daxia = "风清扬" #在子函数中,修改并访问上一级函数变量值
test2()
print(daxia) #检查test2修改后局部变量值
test1() """
运行结果:
令狐冲
风清扬
""" 

当局部变量与全局变量同名时,在子函数运行期间,局部变量有效,在子函数退出后,全局变量有效。

 daxia = "令狐冲"
def test1 ():
daxia = "李寻欢"
print(daxia) #在子函数内部,访问局部变量daxia对应的值
test1()
print(daxia) #在主函数中,访问全局变量daxia对应的值 """
运行结果:
李寻欢
令狐冲
"""

6. 函数作用域由函数定义过程决定,与函数的调用过程无关。

二. 递归函数

    如果一个函数在内部调用自身,则这个函数就是递归函数。递归函数有以下特点:

1. 必须有一个明确的结束条件;

2. 每次进入更深一层递归时,问题规模比上一次递归应有所减少;

3. 递归执行效率不高,递归次数过多会导致内存溢出。

 def calc(n):
print(n)
if int(n/2)==0:
return n
res = calc(int(n/2))
return res
res = calc(10)
print(res) """
运行结果:
10
5
2
1
1
"""

运行过程分析:

三. 匿名函数

匿名函数定义方法:lambda 形参:逻辑操作

lambda函数的返回结果为该函数的地址。

 func = lambda x,y:(x+1,y+1)    #将匿名函数的地址重新赋值给名为func的子函数
n = func(10,11) #通过名为func的子函数获取lambda函数的运行结果:(10+1,11+1)
print(n) """
运行结果:(11, 12)
"""

四. 高阶函数

    满足以下条件之一的函数称为高阶函数:

1. 函数接收的参数中包含函数名

 def foo(n):
print(n)
def bar(name):
print("my name is",name)
return name
foo(bar("alex")) """
运行结果:
my name is alex
alex
结果分析:子函数bar()的运行结果作为foo()的输入,依次调用bar()与foo()
"""

2. 函数返回值中包含函数名

 def foo():
print("from foo")
def bar():
print("from bar")
return foo
n = bar() #通过调用函数bar()将子函数foo()的地址赋值给变量n
n() #相当于foo() """
运行结果:
from bar
from foo
"""
 name = "alex"
def bar():
name = "rabin"
def foo():
print(name)
return foo
n = bar() #通过调用函数bar()将子函数foo()的地址赋值给变量n
print(n)
n() #相当于foo() """
运行结果:
<function bar.<locals>.foo at 0x000001CA041E16A8>
rabin
"""
 def bar():
name = "alex"
def foo():
name = "rabin"
def tt():
print(name)
return tt
return foo
n = bar() #通过调用函数bar()将子函数foo()的地址赋值给变量n
print(n)
m = n() #相当于foo(),将子函数tt()的地址赋值给变量m
print(m)
m() #相当于foo() """
运行结果:
<function bar.<locals>.foo at 0x0000021720DC76A8>
<function bar.<locals>.foo.<locals>.tt at 0x0000021720DC7730>
rabin
"""

五.   map函数

1. 函数调用:res = map(func,list)

2. 函数功能描述:对list序列中每个元素进行指定的func函数功能操作,输出序列中元素个数及位置保持不变。

3. 示例代码:

 num_list = [11,22,33,44,55]
res = map(lambda x:x+1,num_list)
print(list(res)) """
运行结果:[12, 23, 34, 45, 56]
结果分析:对序列num_list中的每个元素值+1
"""

4. 等同功能函数实现代码:

 num_list = [11,22,33,44,55]
def map_test(func,num_list):
res = []
for item in num_list:
a = func(item)
res.append(a)
return res
res = map_test(lambda x:x+1,num_list)
print(list(res)) """
运行结果:[12, 23, 34, 45, 56]
结果分析:对序列num_list中的每个元素值+1
"""

六. filter函数

1. 函数调用:filter(func,list)

2. 函数功能描述:遍历筛选出list序列中所有满足func逻辑的元素。

3. 示例代码:

 num_list = ["李寻欢","令狐冲","风清扬","李世民","萧峰"]
res = filter(lambda x:x.startswith("李"),num_list)
print(list(res)) """
运行结果:['李寻欢', '李世民']
结果分析:筛选出序列num_list中以"李"开头的元素
"""

4. 等同功能函数实现代码:

 num_list = ["李寻欢","令狐冲","风清扬","李世民","萧峰"]
def filter_test(func,num_list):
res = []
for item in num_list:
if func(item):
res.append(item)
return res
res = filter_test(lambda x:x.startswith("李"),num_list)
print(list(res)) """
运行结果:['李寻欢', '李世民']
结果分析:筛选出序列num_list中以"李"开头的元素
"""

七. reduce函数

1. 函数调用:reduce(func,list,initial=None)

2. 函数功能描述:对list序列中的每个元素进行func函数功能操作,输出元素个数发生变化

3. 示例代码:

 from functools import reduce
num_list = [11,22,33,44]
res = reduce(lambda x,y:x+y,num_list)
print(res) """
运行结果:110
结果分析:计算序列num_list中所有元素之和
"""

4. 等同功能函数实现代码:

 num_list = [11,22,33,44]
def reduce_test(func,num_list,init=None):
if init is None:
res = num_list.pop(0)
else:
res = init
for item in num_list:
res = func(res,item)
return res
res = reduce_test(lambda x,y:x+y,num_list)
print(res) """
运行结果:110
结果分析:计算序列num_list中所有元素之和
"""

day03.1-函数编程的更多相关文章

  1. JavaScript函数编程-Ramdajs

    在JavaScript语言世界,函数是第一等公民.JavaScript函数是继承自Function的对象,函数能作另一个函数的参数或者返回值使用,这便形成了我们常说的高阶函数(或称函数对象).这就构成 ...

  2. 传智播客JavaWeb day03

    ServletContext 这堂课主要讲ServletContext这个web域(可以看得见范围的)对象,web在启动的时候会创建唯一的ServletContext域对象. 作用:1.用来web域共 ...

  3. Java基础毕向东day03

    Java基础毕向东day03 1.变量 2.条件结构 3.循环结构,for while,和几种特殊的情况. 4.函数重载

  4. [转] 函数编程之闭包漫谈(Closure)

    在函数编程中经常用到闭包.闭包是什么,它是怎么产生的及用来解决什么问题呢.给出字面的定义 先:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境).这个从字面上很难理解,特别对于一 ...

  5. My way to Python - Day03

    列表和字典的赋值 dict1 = {} dict1['k1'] = 'v1' list1 = [] list1.append('v1') 集合系列 1,计数器 Python 2.7.6 (defaul ...

  6. scala 函数编程

     scala 函数编程  Effective Scala.pdf: http://www.t00y.com/file/76767869 Functional_Programming_in_Scal ...

  7. Oracle DB Day03(SQL)

    --day03 --创建一个包含下面信息的表,并添加一些记录待用 --EMPLOYEE_ID NOT NULL NUMBER(6) --FIRST_NAME VARCHAR2(20) --LAST_N ...

  8. 第二章 函数编程&常用标准库

    函数编程&常用标准库                                                                                       ...

  9. python day03笔记总结

    2019.3.29 S21 day03笔记总结 昨日回顾及补充 1.运算符补充 in not in 2.优先级 运算符与运算符之间也有优先级之分 今日内容 一.整型(int) py2 与 py3 的区 ...

  10. Python基础-day03

    写在前面 上课第三天,打卡:  不要让干净的灵魂染上尘埃,永远年轻.永远热泪盈眶 一.再谈编码 - 文件的概念 '文件' 是一个抽象的概念,是操作系统提供的外部存储设备的抽象,对应底层的硬盘:它是程序 ...

随机推荐

  1. iOS学习之UIPickerView控件的简单使用

    UIPickerView控件在给用户选择某些特定的数据时经常使用到,这里演示一个简单的选择数据,显示在UITextField输入框里,把UIPickerView作为输入View,用Toolbar作为选 ...

  2. Java字符串与文件的互转操作

    Java中有时候需要读取一个文本类的文件,将其转换为字符串,然后做进一步处理.Java中没有现成的API方法.   一.字符串转换为文件 /** * 将字符串写入指定文件(当指定的父路径中文件夹不存在 ...

  3. 团队作业4Alpha冲刺

    仓库地址:https://gitee.com/ILoveFunGame/game_strategy_network.git 第一天 2018/6/13 1.1 今日完成任务情况以及遇到的问题. 1.1 ...

  4. Stars URAL - 1028

    就是给你一些星星的坐标,然后求出每个星星的左下角有多少颗星星 题目保证按照Y坐标的顺序给出每个星星的坐标,那么我们就可以说,当输入某个星星的坐标时,此时有多少个星星的横坐标小于它,它左下角就有多少星星 ...

  5. fidder 自动保存请求内容

    背景: 因为公司有有app和sdk,这些项目没有对应的接口统计.重构的时候很容易忽略掉.所以对fiddler写了一点代码,能将请求的数据写入到文件或者数据库中.方便统计接口,下次重构的时候,方便统计影 ...

  6. c# 类中使用ResolveUrl

    类中使用ResolveUrl 1>获取当前page然后调用ResolveUrl System.Web.UI.Page page = HttpContext.Current.CurrentHand ...

  7. UML建模之类图

    UML类间关系的种类 从一个示例开始 请看以下这个类图,类之间的关系是我们需要关注的: 车的类图结构为<<abstract>>,表示车是一个抽象类: 它有两个继承类:小汽车和自 ...

  8. 要生成在[min,max]之间的随机整数,

    import java.util.Random; public class RandomTest { public static void main(String[] args) { int max= ...

  9. linux fuser的使用

    当进行共享存储的时候,umount可能无法用于卸载某个设备,说是被某个进程所占用,但是又无法找到该进程.这个时候使用fuser -km /data命令杀死所有在使用这个存储设备的进程然后再umount ...

  10. python 全栈基础作业题

    1.执行 Python 脚本的两种方式 1..直接使用PyCharm执行 2.python run.py 调用python 解释器来调用python脚本 2.简述位.字节的关系 数据存储是以“字节”( ...