我们写东东的时候,往往有一些东西要频繁去复用,那么每个功能是10行代码,复用2次就是20行,这样看来我们的程序如果频繁利用某些代码的话,那么会是我们开发的东西越来越臃肿。那么好的方法有没有呢,那就是函数,函数可以把功能进行模块化,当大量复用的时候,可以有效的减少代码数量。

那么啥叫函数呢?打个土鳖的比方,比如我要从单位回老家的话,需要先坐地铁去火车站,然后乘坐XXx列火车回XX地,然后再打车回家。

  好的,那么我们可以把这个过程抽象成一个函数命名为"回老家",当我把这个过程讲述一遍以后,在今后我再提起回老家,就可以想到。要坐地铁去火车站,然后乘坐XXx列火车回XX地,然后再打车回家这样的一个过程。这就是一个函数。

  抽象成python代码的话可能是这样的:

  

def 回老家():
坐地铁去火车站
乘坐xxx列车
打车回家

  好的,上面的def(define)是用来声明一个函数。函数主体就是一个过程。

  接下来我们实际编写一个函数:

def SayHello():
print "hello world!"

上面的函数,只要我们引用他,那么他就会打印hello world这句话,

接下来我们就要讲些如何给函数赋值变量了。不然他总执行一个动作,功能上未免有些单一。

函数的参数赋值,基本上分为3类。

第一类,直接引用参数(变量)

def SayHello(a,b,c):
print "hello world %s %s %s" %(a,b,c) 1、使用方法:
SayHello("hello","world","!")#依次将"hello","world","!"赋值给a,b,c,缺陷是:如果用户给出的参数个数小于要求个数会报错。
2、使用方法:
SayHello(a="say",b="hello",c="world")#依次将"say","hello","world",赋值给a,b,c,好处是,可以一目了然的知晓赋值了哪些参数。

当然有些时候,我们限定了2个参数,如果用户少给了参数,那么程序会报错,但是用户手抖或者记错了,多写了参数一般情况都是不输出,那岂不是很不爽,是吧?

那好我们接下来看看怎么让用户多输入的参数也能够打印出来。

#-*- encoding:utf8 -*-
a="hello"
b="world"
def say2(a,b,*c):
print "系统默认的参数%s %s" %(a,b)
if c:
print "其他参数",
for i in c:
print i,
say2(a,b,"other","canshu")

这样输出出来:

系统默认的参数hello world
其他参数 other canshu

那好,我们来看看*c做了一个什么操作

#-*- encoding:utf8 -*-
a="hello"
b="world"
def say2(a,b,*c):
print "系统默认的参数%s %s" %(a,b)
if c:
print "c is ",c
print "其他参数",
for i in c:
print i,
say2(a,b,"other","canshu") 输出结果:
系统默认的参数hello world
c is ('other', 'canshu')
其他参数 other canshu

好的,我们可以看到*c 就是把原来未定义的所有参数,都融合到一起,然后组成了一个列表(关于列表的使用这里就不赘述了)。

在看另一种情况,如果某些同学佯装高端,这么去写

#-*- encoding:utf8 -*-
a="hello"
b="world"
def say2(a,b,*c):
print "系统默认的参数%s %s" %(a,b)
if c:
print "c is ",c
print "其他参数",
for i in c:
print i,
say2(a="other",b="world",name="dab") 结果出错: Traceback (most recent call last):
  File "F:\python\python\crossin\test_def.py", line 11, in <module>
    say2(a="other",b="world",name="dab")
TypeError: say2() got an unexpected keyword argument 'name'
告诉你类型错误,获取了一个意外的关键词选项。

这个错误是因为name="dab"无法转换为列表。那这种情况可以使用如下代码进行处理。

#-*- encoding:utf8 -*-
a="hello"
b="world"
def say2(a,b,**c):
print "系统默认的参数%s %s" %(a,b)
if c:
print "c is ",c
print "其他参数",
for i in c:
print i,
say2(a="other",b="world",name="dab") 结果:
系统默认的参数other world
c is {'name': 'dab'}
其他参数 name

从上面的结果可以看到,**c是把多余的选项当作字典进行储存。

python学习:函数的学习的更多相关文章

  1. Python学习---函数的学习1209[all]

    1.基础函数 2.高阶函数 3.递归函数 4.内置函数 5.匿名函数和闭包

  2. .Net程序员之Python基础教程学习----函数和异常处理[Fifth Day]

       今天主要记录,Python中函数的使用以及异常处理. 一.函数:    1.函数的创建以及调用. def Add(val1,val2): return val1+val2; print Add( ...

  3. python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法

    python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法 在Python中字符串处理函数里有三个去空格(包括'\n', '\r', '\t', ' ')的函数 ...

  4. python函数基础学习

    函数的定义与调用: def 函数名(参数1,参数2): ‘’’函数注释’’’ print(‘函数体’) return 返回值 定  义:def关键字开关,空格之后接函数名和圆括号,最后冒号结尾 def ...

  5. python学习-函数和lambda表达式(五)

    5.2函数参数 位置参数:根据位置传入参数 关键字参数:根据参数名来传入参数 def girth(width, height): print("width:", width) pr ...

  6. Python函数参数学习笔记

    1.Python中函数参数类型可分为五种: f(x):x为位置参数: f(x,n=2):n为默认参数,调用时可以省略参数n,如f(5); f(*args):*args表示把args这个list或tup ...

  7. Python学习---基础函数的学习

    1.1. 基础函数 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. 灌输一个概念:Python中函数就是对象,函数和我们之前的[1,2,3],'abc ...

  8. python学习——函数返回值及递归

    返回值 return语句是从python 函数返回一个值,在讲到定义函数的时候有讲过,每个函数都要有一个返回值.Python中的return语句有什么作用,今天小编就依目前所了解的讲解一下.pytho ...

  9. python学习——函数及其参数

    函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率.严格来说python只有函数,没有过程,人们理解的函数都是带有return的,而过程 ...

  10. Python装饰器模式学习总结

    装饰器模式,重点在于装饰.装饰的核心仍旧是被装饰对象. 类比于Java编程的时候的包装模式,是同样的道理.虽然概念上稍有不同但是原理上还是比较相近的.下面我就来谈一谈我对Python的装饰器的学习的一 ...

随机推荐

  1. Python namedtuple

    我们都知道Python中的tuple是一个非常高效的集合对象,但是我们只能通过索引的方式访问这个集合中的元素,比如下面的代码: Bob=('bob',30,'male') print'Represen ...

  2. [Golang] 一个简易代理池

    晚上写了一个代理池,就是在一个代理网站上爬取代理ip和端口以及测试是否可用.接下来可能考虑扩展成一个比较大的 golang实现的代理池. 简易版代码: package main import ( &q ...

  3. 《BI项目笔记》基于雪花模型的维度设计

    GBGradeCode 外键关系: 1 烟叶等级 T_GBGradeCode.I_DistinctionID=T_Distinction.I_DistinctionID 烟叶等级分为:上等烟.中等烟. ...

  4. 讲解Python中的递归函数

    本文的最重要的收获在于:尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式. 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 举个例 ...

  5. git@Osc初识

    加油! 参考博客:http://www.cnblogs.com/lpshou/archive/2013/07/18/3199243.html 今天尝试了下git@osc的项目导入,基本算是入门了git ...

  6. (九)errno和perror、标准IO

    3.1.6.文件读写的一些细节3.1.6.1.errno和perror(1)errno就是error number,意思就是错误号码.linux系统中对各种常见错误做了个编号,当函数执行错误时,函数会 ...

  7. (五)socket实践编程

    1.服务器端程序编写 (1)socket(2)bind(3)listen(4)accept,返回值是一个fd,accept正确返回就表示我们已经和前来连接我的客户端之间建立了一个TCP连接了,以后我们 ...

  8. iOS开发 利用Reachability判断网络环境

    导入头文件:#import "Reachability.h" 然后将 SystemConfiguration.framework 添加进工程: 1.检查当前的网络状态(wifi.W ...

  9. 关于H5中自定义属性的设置和获取

    自定义数据属性是在HTML5中新加入的一个特性.简单来说,自定义数据属性规范规定任何以data-开头属性名并且赋值.自定义数据属性是为了保存页面或者应用程序的私有自定义数据,这些自定义数据属性保存进D ...

  10. yii2-basic后台管理功能开发之二:创建CRUD增删改查

    昨天实现了后台模板的嵌套,今天我们可以试着创建CRUD模型啦 刚开始的应该都是“套用”,不再打算细说,只把关键的地方指出来. CRUD即数据库增删改查操作.可以理解为yii2为我们做了一个组件,来实现 ...