老齐python-基础8(函数)

1、函数基本概念

2、理解函数

    python中一个函数,就是一种映射关系

3、定义函数

#!/usr/bin/env python
#coding:utf-8

def add_function(a,b):   
    c = a+b
    return c

if __name__ == "__main__":
    result = add_function(2,3)
    print(result)

def:是函数的开始,在声明要建立一个函数的时候,一定要使用def(define),意思就是告知python解析器,这里要声明一个函数。def所在的哪一行,包括后面的add_function(a,b)被称为函数头。

add_function:是函数名称。取名是有讲究的,在python中取名字的讲究就是要有一定的意义,能够从名字中看出这个函数是用来干什么的。

(a,b)是参数列表,要写在括号里面。这是一个变量(参数)列表,其中的变量(参数)指向函数的输入。

: 非常重要,如果少了,就会报错

c = a + b ,这一行开始就是函数体,函数体是缩进了4个空格的代码块,完成你需要完成的工作,

return c ,需要缩进4个空格,return是函数的关键字,意思是要返回一个值。return语句执行时,python跳出当前的函数并返回到调用这个函数的地方,在下面,有调用这个函数的地方 :result = add_function(2,3)但是,函数中的return语句也不是必须要写的,如果不写,python将认为以return None作为结束。也就是说,如果函数中没有return ,事实上在调用的时候,python也会返回一个结果None

if __name__ == "__main__":

result = add_function(2,3)

总结:

    def 函数名(参数1,参数2,...参数n):

    函数体(语句块)

4、标准

    函数名的命名规则要符合python中的命名要求,一般用小写字母和单下划线、数字等组合。

    def是定义函数的关键词,这个简写来自英文单词define

    函数名后面是圆括号,括号里面可以有参数列表,也可以没有参数。

    千万不要忘记括号后面的冒号

    函数体(语句块),相对于def缩进,按照python习惯,缩进4个空格

    

    多态:

>>> add("qiw","sir")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'add' is not defined
>>> def add(x,y):
...     return x+y
... 
>>> add("qiw","sir")
'qiwsir'
>>> add("qiwsir",4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in add
TypeError: Can't convert 'int' object to str implicitly

  对象有类型,变量无类型

>>> add
<function add at 0x7fabf4c30b70>
>>> type(add)
<class 'function'>
>>> r = add
>>> r
<function add at 0x7fabf4c30b70>
>>> r(3,4)
7
>>> add(3,4)
7
>>> type(r)
<class 'function'>

  

5、命名总结

    变量:变量名全部小写,由下划线连接各个单词,注意,变量的命名不要与Python保留的关键字冲突

    文件名:全小写,可始用下划线

    函数名:小写,可以始用下划线风格的单词,以增加可读性。

    函数的参数:命名方式同变量(本质上就是变量)

6、函数调用

    降低编程难度

    代码重用

>>> add(10,3)
x=10
y=3
13
>>> add(x=10,y=3)  #指定函数变量值
x=10
y=3
13
>>> add(y=10,x=3)
x=3
y=10
13
>>> def times(x,y=2):   #创建函数内变量默认值
...   print("x={}".format(x))
...   print("y=",y)
...   return x * y
... 
>>> times(2)
x=2
y= 2
4
>>> times(3,4)  #改变函数内变量默认值
x=3
y= 4
12

>>> def foo():    #函数嵌套,调用一个不存在的函数
...   print('Hello,Teacher Cang!')
...   bar()
... 
>>> foo()
Hello,Teacher Cang!
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in foo
NameError: name 'bar' is not defined
>>> def bar(): pass  #定义函数体内函数,pass表示什么也不做
... 
>>> foo()
Hello,Teacher Cang!

 

7、函数返回值

    斐波那契数列:

#!/usr/bin/env python3
# encoding: utf-8

"""
@version: ??
@author: tajzhang
@license: Apache Licence 
@file: fbnq.py
@time: 2018/2/28 11:49
"""

def fibs(n):
    result = [0,1]
    for i in range(n-2):
        result.append(result[-2] + result[-1])
    return  result
if __name__ == "__main__":
    lst = fibs(10)
    print(lst)

 返回多个值 

>>> def my_fun():
...   return 1,2,3
... 
>>> a = my_fun()
>>> a
(1, 2, 3)
>>> type(a)
<class 'tuple'>
>>> x,y,z = my_fun()
>>> print(x,y,z)
1 2 3
>>> def foo():   #定义空函数
...   pass
... 
>>> print(foo())  #返回空值
None


>>> def my_fun():  #return中断函数体过程
...   print("I am coding.")
...   return
...   print("I finished.")
... 
>>> my_fun()    
I am coding.

  定义函数中的帮助属性

#!/usr/bin/env python3
# encoding: utf-8

"""
@version: 1.0
@author: tajzhang
@license: Apache Licence 
@file: fbnq.py
@time: 2018/2/28 11:49
"""

def fibs(n):
    """
    This is a Fibonacci sequence.    #定义doc方法输出内容
    """
    result = [0,1]
    for i in range(n-2):
        result.append(result[-2] + result[-1])
    return  result
if __name__ == "__main__":
    lst = fibs(10)
    print(lst)
    print(fibs.__doc__)    #打印doc
>>> my_fun()
I am coding.
>>> def cang():
...   """This is a function of canglaoshi"""
...   pass
... 
>>> cang.__doc__
'This is a function of canglaoshi'
>>> cang.breast = 90     #增加函数属性
>>> cang.breast
90
>>> cang.__name__
'cang'
>>> cang.__module__
'__main__'

  传递多个参数

arg、args

>>> def func(x,*arg):  #将其它参数组成元祖
...   print(x)
...   result = x
...   print(arg)
...   for i in arg:
...     result += i
...   return result
... 
>>> func(1,2,3,4,5,6,7,8,9)  
1
(2, 3, 4, 5, 6, 7, 8, 9)   #arg或args 将多个参数揉进一个元祖
45 
>>> def foo(x,*args):
...   print("x:",x)
...   print("tuple:",args)
... 
>>> foo(7)   #定义函数给args传入空值
x: 7
tuple: ()
posted @ 2017-09-18 16:51  Taj-Zhang  阅读(362)  评论(0编辑  收藏  举报