python 之自定义函数

最近一直被定义函数这东东而头大,直到现在还是懵懵懂懂,不是不去问题,而是对于没有一点基础,注意是一丁点基础的没有的,真不知道怎么问题,脑子有些转不过弯来了。
1.什么是函数
定义函数
函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
面向对象:对函数进行分类和封装,让开发“更快更好更强...”
函数式编程最重要的是增强代码的重用性和可读性
函数的理解:相对于把一组功能,组成成一个或把一堆功能块,放在一个函数里面,然后对这个组合命名一个名称。在代码读取的时候,对于函数的内容是不执行的,但会读入内存中。
例子:
def mail():
    n = 123
    n += 1
    print(n)
mail()  # 此时mail已经并定义为一个函数名
就这么多理解吧,大多都是抄来的,嘿嘿。
2.说函数,不得不说的return
return语句是从函数返回一个值,每个函数都要有一个返回值。函数中一定要有return返回值才是完整的函数。如果你没有定义返回值,那么会得到一个结果是None对象,而None表示没有任何值。也就是说,没有retrun这个函数第一无意义,第二没结果,会是这样吗?看看实验就知道了。
  1. def name(x,y):
  2. z = x+y
  3. print(z)
  4. def names(x,y):
  5. z = x+y
  6. return z
  7. test1 = name(1,2)
  8. test2 = names(2,3)
  9. print(test1)
  10. print(test2)
执行结果:
  1. C:Python34python.exe E:/Python/S12/day1/test1.py
  2. 3 #这个是test1里面有print的所有有显示,但是和test2的不同在于,他只是将结果显示到屏幕上,但对于test1自身来讲,毫无异议,值为空。
  3. None #注意这个是test1 print的结果
  4. 5
  5. Process finished with exit code 0
希望以上总结是对的,望各界大神,来炮弹批评、批评、批评......
最后:写函数,就要有return。
3.形式参数。
先上例子:
  1. def name(x,y):
  2. z = x+y
  3. print(z)
当我们去调用时候,可以是name(1,2),其中1,代表x,2代表y,x、y就是形式参数。这里可以有多个,在调用时候是按照顺序进行匹配的。
4.默认参数
默认参数是指在定义参数时候就可以给参数进行赋值,当需要对赋值的参数进行修改的时候,也可在调用的时候重新赋值,若不赋值,这时候回使用当初赋值的默认值。具体例子如下:
  1. def show(a1,a2=100):
  2. print(a1,a2) #这里为了打印效果,因此没有使用return
  3. show(111)
  4. show(111,112)
执行结果:
  1. 111 100 # show(111)结果
  2. 111 112 # show(111,112)结果
  3. Process finished with exit code 0

这个时候,加入对于a2,没有赋值,则会打印100,若赋值了,就打印赋值的内容,把原来的值就覆盖掉了。
注意:默认参数必须放在参数的最后面


5.指定参数
指定参数就可以让你随心所欲了。
具体例子如下:
  1. def show(a1,a2):
  2. print(a1,a2)
  3. show(a2=123,a1=999) #这样就会按照顺序进行赋值。
执行结果:
  1. 999 123
  2. Process finished with exit code
主要看结果的顺序。
6.动态参数
1).带一个* 默认为元组,最少传入一个参数,个数没有限制  传入是个元素就行。
  1. def show(*arg):
  2. print(arg,type(arg))
  3. show(1,22,33,44,55)
执行结果
  1. C:Python34python.exe E:/Python/S12/day1/test1.py
  2. (1, 22, 33, 44, 55) <class 'tuple'>
2)带两个参数,是传入形成字典,个数没有限制
  1. def show(**arg):
  2. print(arg,type(arg))
  3. show(n1=11,n2=22,n3=33)
执行结果:
  1. C:Python34python.exe E:/Python/test1.py
  2. {'n3': 33, 'n2': 22, 'n1': 11} <class 'dict'>
  3. Process finished with exit code 0
3)下面情况下,就会同时具备元组和字典的功能。写参数的时候规则是一个星星的内容放在前面,两个星星内容放在后面,同时两者的顺序也不能变
  1. def show(*test1,**test2):
  2. print(test1,type(test1))
  3. print(test2,type(test2))
  4. show(11,22,3,n1=222,n2='ddd')
执行结果:
  1. C:Python34python.exe E:/Python/test1.py
  2. (11, 22, 3) <class 'tuple'>
  3. {'n1': 222, 'n2': 'ddd'} <class 'dict'>
  4. Process finished with exit code 0
注意顺序相当重要,顺序不对,无法执行:
  1. def show(*test1,**test2):
  2. print(test1,type(test1))
  3. print(test2,type(test2))
  4. show(n1=222,n2='ddd',11,22,3,)
执行结果:






原文地址:https://www.cnblogs.com/worter991/p/5155746.html