进阶篇 函数 第一节
一、函数基本概念
define
def func_name():
pass
使用函数内建议要有return
root@kali:~/python/laowangpy/function# ls
fuc_name_1.py
root@kali:~/python/laowangpy/function# cat fuc_name_1.py
#!/usr/bin/python
# --*-- coding:utf-8 --*--
def funct1():
return "1234567888"
print funct1()
root@kali:~/python/laowangpy/function# python fuc_name_1.py
1234567888
root@kali:~/python/laowangpy/function#
函数内没有return
root@kali:~/python/laowangpy/function# cat fuc_name_1.py
#!/usr/bin/python
# --*-- coding:utf-8 --*--
def funct1():
print 222
#return None #默认是返回None的值
print funct1()
root@kali:~/python/laowangpy/function# python fuc_name_1.py
222
None
root@kali:~/python/laowangpy/function#
root@kali:~/python/laowangpy/function# cat fuc_name_1.py
#!/usr/bin/python
# --*-- coding:utf-8 --*--
def funct1():
print 222
#return None #默认是返回None的值
#print funct1()
test = funct1()
print type(test)
root@kali:~/python/laowangpy/function# python fuc_name_1.py
222
<type 'NoneType'>
root@kali:~/python/laowangpy/function#
在使用函数尽量使用return与print配合,而不是只使用print,使用print的话会返回两个值
root@kali:~/python/laowangpy/function# cat fuc_name_1.py
#!/usr/bin/python
# --*-- coding:utf-8 --*--
def funct1():
print 222
#return None #默认是返回None的值
#print funct1()
#test = funct1()
#print type(test)
print funct1()
root@kali:~/python/laowangpy/function# python fuc_name_1.py
222
None
root@kali:~/python/laowangpy/function#
root@kali:~/python/laowangpy/function# cat fuc_add.py
#!/usr/bin/python
# --*-- coding:utf-8 --*--
def add(num1,num2):
return num1+num2
print add(2,3)
root@kali:~/python/laowangpy/function# python fuc_add.py
5
root@kali:~/python/laowangpy/function#
二、.参数 <=> 抽象
1、如何制造参数? 去抽象需求
root@kali:~/python/laowangpy/function# cat fuc_add.py
#!/usr/bin/python
# --*-- coding:utf-8 --*--
def add(num1,num2):
return num1+num2
print add(2,3)
print add(4,6)
print add(8,9)
root@kali:~/python/laowangpy/function# python fuc_add.py
5
10
17
root@kali:~/python/laowangpy/function#
2.参数 分为 可选参数 必须的参数
更复杂的需求
1 + 2 = 3
1 + 2 + 3
1 + 2+ ....+ 1000
def add(*num):
d = 0
for i in num:
d += i
return d
print add(1,2,3,4,5)
def add(*num):
d = 0
for i in num:
d += i
return d
print add(1,2,3,4,5)
print add(1,2,3)
print add(2,4,6,8,1,2,3,4,12312,12314,123,123,123)
var1
var2
var3
var1 = None
1)、可选参数 是有默认值的(便于多处调用)
root@kali:~/python/laowangpy/function# cat funvar2.py
#!/usr/bin/python
# --*-- coding:utf:8 --*--
def add(num1=2,num2=3):
return num1+num2
print add()
root@kali:~/python/laowangpy/function# python funvar2.py
5
root@kali:~/python/laowangpy/function#
def add(*num):
里面的是一个*参数时,这个就是tuple元组
里面的是两个*参数时,这个就是dictionary字典
2)、必选参数 是没有默认值的
root@kali:~/python/laowangpy/function# cat funvar1.py
#!/usr/bin/python
# --*-- coding:utf-8 --*--
def add(*num):
print type(num)
d = 0
for i in num:
d += i
return d
print add(12,3,4,5)
print add(44,55,66)
print (11,2,3,4,5,666,778,888,99)
root@kali:~/python/laowangpy/function# python funvar1.py
<type 'tuple'>
24
<type 'tuple'>
165
(11, 2, 3, 4, 5, 666, 778, 888, 99)
root@kali:~/python/laowangpy/function#
3)、默认值和没有默认值的区别在于 “=”
三、函数的健壮性(判断类型是否一致?实时查看错误信息)
1.你永远知道你的方法会返回什么(异常处理,条件判断)
2.返回你想要的结果
def add(num1 ,num2):
if isinstance(num1,int) and isinstance(num2, int):#判断是否都是整型数据
return num1+num2
else:
return '参数里有不是数字的类型'
print add('a',(1,2,3))
print add(1,2)
#断言,测试结果是否属于期望的
assert add(1,2) == 3
assert add(2,4) == 3
代码运行情况:
root@kali:~/python/laowangpy/function# cat funvar3.py
#!/usr/bin/python
# --*-- coding:utf-8 --*--
def add(num1 ,num2):
if isinstance(num1,int) and isinstance(num2, int):#判断是否都是整型数据
return num1+num2
else:
return '参数里有不是数字的类型'
print add('a',(1,2,3))
print add(1,2)
#断言,测试结果是否属于期望的
assert add(1,2) == 3
assert add(2,4) == 3
root@kali:~/python/laowangpy/function# python funvar3.py
参数里有不是数字的类型
3
Traceback (most recent call last):
File "funvar3.py", line 17, in <module>
assert add(2,4) == 3
AssertionError
root@kali:~/python/laowangpy/function#