码迷,mamicode.com
首页 > 其他好文 > 详细

复习 函数

时间:2017-12-02 00:38:14      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:python 函数

1.1 函数定义

函数

(1)函数就是完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给他取一个名字。

(2)可以通过函数名在程序的不同地方多次执行(即,函数的调用)

(3)预定义函数,可以直接使用

(4)自定义函数,用户自己编写

(5)为社么使用函数:

         ① 降低编程难度

                - 通常将一个复杂的大问题分解成一系列小问题,然后将小问题划分成更小的问题,当问题细化为足够简单时,就可以分而治之,各个小问题解决了,大问题就迎刃而解了。

         ② 代码重用

                - 避免重复劳动,提升效率

定义函数:

函数的定义和调用:

    - def 函数名([参数列表]):        // 定义
    - 函数名([参数列表])         // 调用


函数名的命名规则:

    函数名可以是以字母,数字,下划线命名的,但是不能以数字开头


    函数名在定义的时候跟变量有点区别

        "变量"都是定义成 小写 的;

        "函数名" 如果是由两个单词组成,第二个单词首字母要大写,也就是说,如果由多个单词组成,除了开头第一个单词首字母不要大写,其余单词首字母都要大写;两个单词之间可以通过下划线连接;

        "类"的命名:每个单词首字母都要大写;

    要养成这样的规范习惯。


定义函数例子:

def fun():
    print "hello world"

函数调用:


fun()
hello world


举例:

当我执行脚本的时候,提示我从键盘读取输入:

技术分享图片

结果:

技术分享图片


1.2 函数的参数

形参和实参:

- 在定义函数的时候,函数名后面括号中的变量名称叫做“形式参数”,或者称为“形参”

- 在调用函数时,函数名后面括号中的变量名称叫做“实际参数”,或者称为“实参”


形参:

    def  fun(x, y):
        print x + y

x , y 是2个形式参数


调用(传参):

fun(2, 3)
5


举例:

判断并打印最大的数

技术分享图片

调用

技术分享图片


实际参数:

import sys
print sys.argv[1]

打印参数

python test.py 1 2
1

举例:

判断是否是数字

技术分享图片

结果:

技术分享图片


1.3 函数的默认参数

练习

打印系统所有的PID

    要求从 /proc 读取

    os.listdir()


import os 
os.listdir()

os.listdir() 帮助信息

技术分享图片

用法:

os.listdir('/proc')


脚本:

import sys
import os
def isNum(s):
    for i in s:
        if i in '0123456789':
            pass
        else:
            break
    else:
            print s
for i in os.listdir('/proc'):
    isNum(i)



默认参数

缺省参数(默认参数)

def fun(x, y = 100):
    print x, y

调用:

fun(1, 2)
fun(1)


结果自然不同

举例解释:

技术分享图片

调用的时候,实参会代替100

技术分享图片

只有一个参数的时候,y使用默认的值


举例:

技术分享图片

若指定参数,则

技术分享图片

错误举例:

def fun(x=2, y):
    print x + y

报错:

技术分享图片

结论:

    默认参数只能在最后的形参上,不能在前面或中间,只能在最后,方向从右到左,比如有3个参数,定义默认参数可以是"最后一个参数" ,或"第二个和最后一个",或"第一和第二和第三个参数"都定义。



默认参数主要看位置

技术分享图片

本节总结:

默认参数就是我们在调用函数的时候,如果没有给函数传值得话,会使用默认参数给函数传值


1.4 函数的变量

局部变量和全局变量

- python中的任何变量都有特定的作用域

- 在函数中定义的变量一般只能在该函数内部使用,这些只能在程序特定部分使用的变量,称之为局部变量;

- 在一个文件顶部定义的变量可以供文件中的任何函数调用,这些可以为整个程序所使用的变量称之为全局变量。


局部变量:

def fun():
    x = 100 
    print x
fun()


全局变量:

x = "global var"
def fun():
    x = 100
    print x
fun()
print x



通过关键字声明:

在函数里面,把x声明为全局变量

x = 100
def fun():
    global x
    x += 1
    print x
fun()


同理,在函数内部将关键字声明为全局变量,当函数被调用的时候,在外部能打印出函数内部的变量:

x = 100
def fun():
    global x
    x += 1
    global y
    y = 1
fun()
print x
print y


locals 的用法(试一下):

x = 100
def fun():
    x = 1
    y = 1
    print locals()
    
fun()
print locals()

链接:http://blog.csdn.net/scelong/article/details/6977867


1.5 函数的返回值

- 函数被调用后会返回一个指定的值

- 函数调用后默认返回None

- return 返回值

- 返回值可以是任意类型

- return执行后,函数终止

- return与print的区别


函数被调用后会返回一个指定值

技术分享图片

执行脚本:

技术分享图片

None就是函数的返回值


修改脚本:

技术分享图片

执行脚本:

技术分享图片

这个返回值可是任意类型,也可以返回True


1.6 多类型传值和冗余参数

多类型传值

定义函数

def fun(x, y):
    return x + y

print fun(3, 5)

将一个元组传入函数

t = (3, 7)
fun(*t)

10	#返回的函数结果


举例:

传入多个参数的三种形式:

技术分享图片

错误的写法:

技术分享图片

所以,元组不能写在前面



另外,还可以指定参数值,如下

技术分享图片

传入的参数名字一定要和函数内形参的名字要一致,下面两种错误的方法:

技术分享图片

'x'被函数当成了一个字符串变量


技术分享图片

a,b,c 报类型错误,与函数的形参不一致,函数不知道这三个新导入的参里面是什么

名字一定要和形参一致。



函数传入字典的方法

把字典作为参数传入函数

技术分享图片

同理,定义的字典里面的 key 也要和函数里面的形参一致

定义的字典里面的key,要加引号,比如 'x':1,否则,不加引号字典会把x定义为变量,定义字典会报错。

技术分享图片

总结:

可以向函数内部传入元组和字典,可以把元组里面的元素作为参数传给函数,也可以把字典里面的value作为参数传给函数,但是定义字典的时候字典的key一定要和函数的形参一致。


冗余参数

定义函数的时候,函数有3个参数,调用函数的时候,只能给传3个参数,不能传多,也不能传少

有时候,我们要让函数接收多一些的参数,但是传的时候可能只传了少数几个,或者传入更多参数。

def  fun(x, y=1, *args, **kwargs)

解释:

x 叫默认参数(命名参数)

y=1 叫关键字参数

*args 和 **kwargs 叫 可变参数(或者冗余参数)


举例:

定义函数

技术分享图片

传入一个参数,返回

技术分享图片

再传入一个参数,返回

技术分享图片

2被认为是冗余参数,并且是以元组的形式往里传。

传入字符串、列表传入进去,都会存入元组里:

技术分享图片

再传入一个参数 y=2:

技术分享图片

返回的是字典,可以多传入几个:

技术分享图片

多类型传值里面我们定义了元组类型的变量 t,我们把他作为参数传入函数

技术分享图片

同理,字典也可以以参数形式传入函数或者 a=3这种形式:

技术分享图片

1.7 函数的递归调用

递归就是在函数内部调用他自己

通常用递归去调用阶乘

最基本的阶乘:就是循环方式实现阶乘

举例1:

技术分享图片

举例2:

技术分享图片

下面使用递归的方式实现阶乘:

首先,递归的注意事项:

技术分享图片

所谓"默认结果" 就是当参数等于0的时候,返回1


形象一点:

技术分享图片

上图 f(0) 的时候,结果就是1

举例:

技术分享图片

举例:

技术分享图片

复习 函数

标签:python 函数

原文地址:http://blog.51cto.com/286577399/2046625

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!