day03.1-函数编程
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-函数编程的更多相关文章
- JavaScript函数编程-Ramdajs
在JavaScript语言世界,函数是第一等公民.JavaScript函数是继承自Function的对象,函数能作另一个函数的参数或者返回值使用,这便形成了我们常说的高阶函数(或称函数对象).这就构成 ...
- 传智播客JavaWeb day03
ServletContext 这堂课主要讲ServletContext这个web域(可以看得见范围的)对象,web在启动的时候会创建唯一的ServletContext域对象. 作用:1.用来web域共 ...
- Java基础毕向东day03
Java基础毕向东day03 1.变量 2.条件结构 3.循环结构,for while,和几种特殊的情况. 4.函数重载
- [转] 函数编程之闭包漫谈(Closure)
在函数编程中经常用到闭包.闭包是什么,它是怎么产生的及用来解决什么问题呢.给出字面的定义 先:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境).这个从字面上很难理解,特别对于一 ...
- My way to Python - Day03
列表和字典的赋值 dict1 = {} dict1['k1'] = 'v1' list1 = [] list1.append('v1') 集合系列 1,计数器 Python 2.7.6 (defaul ...
- scala 函数编程
scala 函数编程 Effective Scala.pdf: http://www.t00y.com/file/76767869 Functional_Programming_in_Scal ...
- Oracle DB Day03(SQL)
--day03 --创建一个包含下面信息的表,并添加一些记录待用 --EMPLOYEE_ID NOT NULL NUMBER(6) --FIRST_NAME VARCHAR2(20) --LAST_N ...
- 第二章 函数编程&常用标准库
函数编程&常用标准库 ...
- python day03笔记总结
2019.3.29 S21 day03笔记总结 昨日回顾及补充 1.运算符补充 in not in 2.优先级 运算符与运算符之间也有优先级之分 今日内容 一.整型(int) py2 与 py3 的区 ...
- Python基础-day03
写在前面 上课第三天,打卡: 不要让干净的灵魂染上尘埃,永远年轻.永远热泪盈眶 一.再谈编码 - 文件的概念 '文件' 是一个抽象的概念,是操作系统提供的外部存储设备的抽象,对应底层的硬盘:它是程序 ...
随机推荐
- 查看端口占用情况lsof,并关闭对应进程kill
lsof -n -P| grep ":<端口号>" | grep LISTEN #监听对应端口号的进程 lsof -i tcp:<端口号> #和对应端口号有 ...
- 2018/4/26 python文件处理方式
目录 2018/4/26总结 1. 如果有一天群内问题总结: 问题:python2和python3的默认编码是什么? 2. python学习总结: python的处理文件方式 2018/4/26总结 ...
- java算法 蓝桥杯 文化之旅
问题描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能有相同的文化.不同文化 ...
- Think In Java 读后感
近期拜读了Think in Java 一书,这里是一些读后感. 此书不仅仅是市面上那种教会你怎么用系统API来编程的书,那种书太多. 此书不仅仅从头开始讲述了如何 ...
- poj1067-取石子游戏 (威佐夫博弈)
http://poj.org/problem?id=1067 取石子游戏 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 36 ...
- 【UVALive2965】Jurassic Remains
题意 题意给定n个大写字母组成的字符串,选择尽量多的串,使得每个大写字母都能出现偶数次.n<=24,每个字符串中每个字母最多出现一次. 分析 这是训练指南上的一道中途相遇法的简单题,但是好像也能 ...
- Scrapy Test
(flappbird) luo@luo-ThinkPad-W540:~$ scrapy startproject myspider0315New Scrapy project 'myspider031 ...
- devcloud
zone名字:devcloud 外网dns:8.8.8.8 内网dns:10.0.2.3 提供点名称:devcloud cs bug问题:https://issues.apache.org/j ...
- tensorflow学习笔记----tensorflow在windows的安装及TensorBoard中mnist样例
前言: ...
- Redis学习(2)—— 实例与注释说明[转]
import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import ...