python基础 第二天(函数)
来源:互联网 发布:netbeans php常用插件 编辑:程序博客网 时间:2024/06/06 03:02
函数默认参数
看下面代码
1
2
3
4
5
6
7
8
9
10
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"
)
发现 country 这个参数 基本都 是"CN", 就像我们在网站上注册用户,像国籍这种信息,你不填写,默认就会是 中国, 这就是通过默认参数实现的,把country变成默认参数非常简单
1
def
stu_register(name,age,course,country
=
"CN"
):
这样,这个参数在调用时不指定,那默认就是CN,指定了的话,就用你指定的值。
另外,你可能注意到了,在把country变成默认参数后,我同时把它的位置移到了最后面,为什么呢?
关键参数
正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后。
1
stu_register(age
=
22
,name
=
'alex'
,course
=
"python"
,)
非固定参数
若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数
1
2
3
4
5
6
7
8
9
10
def
stu_register(name,age,
*
args):
# *args 会把多传入的参数变成一个元组形式
print
(name,age,args)
stu_register(
"Alex"
,
22
)
#输出
#Alex 22 () #后面这个()就是args,只是因为没传值,所以为空
stu_register(
"Jack"
,
32
,
"CN"
,
"Python"
)
#输出
# Jack 32 ('CN', 'Python')
还可以有一个**kwargs
1
2
3
4
5
6
7
8
9
10
def
stu_register(name,age,
*
args,
*
*
kwargs):
# *kwargs 会把多传入的参数变成一个dict形式
print
(name,age,args,kwargs)
stu_register(
"Alex"
,
22
)
#输出
#Alex 22 () {}#后面这个{}就是kwargs,只是因为没传值,所以为空
stu_register(
"Jack"
,
32
,
"CN"
,
"Python"
,sex
=
"Male"
,province
=
"ShanDong"
)
#输出
# Jack 32 ('CN', 'Python') {'province': 'ShanDong', 'sex': 'Male'}
函数局部变量
1
2
3
4
5
6
7
8
9
10
11
name
=
"Alex Li"
def
change_name(name):
print
(
"before change:"
,name)
name
=
"金角大王,一个有Tesla的男人"
print
(
"after change"
, name)
change_name(name)
print
(
"在外面看看name改了么?"
,name)
输出
1
2
3
before change: Alex Li
after change 金角大王,一个有Tesla的男人
在外面看看name改了么? Alex Li
全局与局部变量
在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
3.函数返回值
要想获取函数的执行结果,就可以用return语句把结果返回
注意:
- 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
- 如果未在函数中指定return,那这个函数的返回值为None
4. 递归
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
1
2
3
4
5
6
7
8
9
10
11
12
13
def
calc(n):
print
(n)
if
int
(n
/
2
)
=
=
0
:
return
n
return
calc(
int
(n
/
2
))
calc(
10
)
输出:
10
5
2
1
递归特性:
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
堆栈扫盲http://www.cnblogs.com/lln7777/archive/2012/03/14/2396164.html
递归函数实际应用案例,二分查找
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
)
阅读全文
0 0
- python基础 第二天(函数)
- Python(基础)第二天
- python第二天基础
- python第二天-函数
- python基础(函数)
- python第二天_python的基础
- 《零基础学python》(第二版)
- python基础第二节
- python基础第二篇
- PYTHON基础第二篇
- python入门第二天——函数
- Python函数第二节
- Python基础学习--第二篇(Python变量和数据类型)
- python+selenium第二节课(python基础)
- Python之路【第二篇】:Python基础(一)
- Python基础(5)-函数
- Python基础(四)- 函数
- Python基础(五)- 函数
- iOS11 Xcode 9 快速跳转到定义新姿势(Jump to Definition)
- 如何在mysql控制台中查看数据库表
- C++11 并发指南二(std::thread 详解)
- spring注解详解
- Spring AOP中pointcut expression
- python基础 第二天(函数)
- 系列:iOS开发-如何快速定位bug并解决
- poj 1556 The Doors
- 生活与编程-开篇
- LightOJ 1027 A Dangerous Maze
- JS实现页面强转https访问的设置方法
- 爬虫实战-获取wegene网站上SNP位点信息
- CHtmlView或IE控件调用js的方法
- leetcode之Merge Two Binary Trees