标签:neu ftp die 案例 lvf aic 指定 cmdb rtp
本节内容
1. 函数基本语法及特性
2. 参数与局部变量
3. 返回值
嵌套函数
4.递归
5.匿名函数
6.函数式编程介绍
7.高阶函数
8.内置函数
特性:
def
sayhi():
#函数名
print
(
"Hello, I‘m nobody!"
)
sayhi()
#调用函数
def
calc(x,y):
res
=
x
*
*
y
return
res
#返回函数执行结果
c
=
calc(a,b) #结果赋值给c变量
print
(c)
形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
默认参数
def
stu_register(name,age,country,course):
print
(
"----注册学生信息------"
)
print
(
"姓名:"
,name)
print
(
"age:"
,age)
print
(
"国籍:"
,country)
print
(
"课程:"
,course)
stu_register(
"王"
,
22
,
"CN"
,
"python_devops"
)
stu_register(
"张春"
,
21
,
"CN"
,
"linux"
)
stu_register(
"刘"
,
25
,
"CN"
,
"linux"
)
正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后。
stu_register(age
=
22
,name
=
‘jeb‘
,course
=
"python"
,)
非固定参数
若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数
def
stu_register(name,age,
*
args):
# *args 会把多传入的参数变成一个元组形式
print
(name,age,args)
stu_register(
"jeb"
,
22
)
#输出
#Alex 22 () #后面这个()就是args,只是因为没传值,所以为空
stu_register(
"Jack"
,
32
,
"CN"
,
"Python"
)
#输出
# Jack 32 (‘CN‘, ‘Python‘)
def
stu_register(name,age,
*
args,
*
*
kwargs):
# *kwargs 会把多传入的参数变成一个dict形式
print
(name,age,args,kwargs)
stu_register(
"jeb"
,
22
)
#输出
#Alex 22 () {}#后面这个{}就是kwargs,只是因为没传值,所以为空
stu_register(
"Jack"
,
32
,
"CN"
,
"Python"
,sex
=
"Male"
,province
=
"ShanDong"
)
#输出
# Jack 32 (‘CN‘, ‘Python‘) {‘province‘: ‘ShanDong‘, ‘sex‘: ‘Male‘}
全局与局部变量
要想获取函数的执行结果,就可以用return语句把结果返回
注意:
name
=
"jeb"
def
change_name():
name
=
"jeb2"
def
change_name2():
name
=
"jeb3"
print
(
"第3层打印"
,name)
change_name2()
#调用内层函数
print
(
"第2层打印"
,name)
change_name()
print
(
"最外层打印"
,name)
def
calc(n):
print
(n)
if
int
(n
/
2
)
=
=
0
:
return
n
return
calc(
int
(n
/
2
))
calc(
10
)
递归特性:
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
堆栈扫盲http://www.cnblogs.com/lln7777/archive/2012/03/14/2396164.html
递归函数实际应用案例,二分查找:
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
)
#这段代码
def
calc(n):
return
n
*
*
n
print
(calc(
10
))
#换成匿名函数
calc
=
lambda
n:n
*
*
n
print
(calc(
10
))
res
=
map
(
lambda
x:x
*
*
2
,[
1
,
5
,
7
,
4
,
8
])
for
i
in
res:
print
(i)
函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。
函数式编程中的函数这个术语不是指计算机中的函数(实际上是Subroutine),而是指数学中的函数,即自变量的映射。也就是说一个函数的值仅决定于函数参数的值,不依赖其他状态。比如sqrt(x)函数计算x的平方根,只要x不变,不论什么时候调用,调用几次,值都是不变的。
Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。
一、定义
简单说,"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论。
函数式编程要求使用函数,我们可以把运算过程定义为不同的函数,然后写成下面这样:
var result = subtract(multiply(add(1,2), 3), 4);
这基本就是自然语言的表达了。再看下面的代码,大家应该一眼就能明白它的意思吧:
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
def
add(x,y,f):
return
f(x)
+
f(y)
res
=
add(
3
,
-
6
,
abs
)
print
(res)
内置参数详解 https://docs.python.org/3/library/functions.html?highlight=built#ascii
标签:neu ftp die 案例 lvf aic 指定 cmdb rtp
原文地址:http://www.cnblogs.com/Jeb15/p/6032300.html