python学习:函数的学习
我们写东东的时候,往往有一些东西要频繁去复用,那么每个功能是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学习:函数的学习的更多相关文章
- Python学习---函数的学习1209[all]
1.基础函数 2.高阶函数 3.递归函数 4.内置函数 5.匿名函数和闭包
- .Net程序员之Python基础教程学习----函数和异常处理[Fifth Day]
今天主要记录,Python中函数的使用以及异常处理. 一.函数: 1.函数的创建以及调用. def Add(val1,val2): return val1+val2; print Add( ...
- python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法
python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法 在Python中字符串处理函数里有三个去空格(包括'\n', '\r', '\t', ' ')的函数 ...
- python函数基础学习
函数的定义与调用: def 函数名(参数1,参数2): ‘’’函数注释’’’ print(‘函数体’) return 返回值 定 义:def关键字开关,空格之后接函数名和圆括号,最后冒号结尾 def ...
- python学习-函数和lambda表达式(五)
5.2函数参数 位置参数:根据位置传入参数 关键字参数:根据参数名来传入参数 def girth(width, height): print("width:", width) pr ...
- Python函数参数学习笔记
1.Python中函数参数类型可分为五种: f(x):x为位置参数: f(x,n=2):n为默认参数,调用时可以省略参数n,如f(5); f(*args):*args表示把args这个list或tup ...
- Python学习---基础函数的学习
1.1. 基础函数 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. 灌输一个概念:Python中函数就是对象,函数和我们之前的[1,2,3],'abc ...
- python学习——函数返回值及递归
返回值 return语句是从python 函数返回一个值,在讲到定义函数的时候有讲过,每个函数都要有一个返回值.Python中的return语句有什么作用,今天小编就依目前所了解的讲解一下.pytho ...
- python学习——函数及其参数
函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率.严格来说python只有函数,没有过程,人们理解的函数都是带有return的,而过程 ...
- Python装饰器模式学习总结
装饰器模式,重点在于装饰.装饰的核心仍旧是被装饰对象. 类比于Java编程的时候的包装模式,是同样的道理.虽然概念上稍有不同但是原理上还是比较相近的.下面我就来谈一谈我对Python的装饰器的学习的一 ...
随机推荐
- python 学习笔记十二 html基础(进阶篇)
HTML 超级文本标记语言是标准通用标记语言下的一个应用,也是一种规范,一种标准,它通过标记符号来标记要显示的网页中的各个部分.网页文件本身 是一种文本文件,通过在文本文件中添加标记符, 可以告诉浏览 ...
- GridControl
隐藏Drag a column header here to group by that column https://www.devexpress.com/Support/Center/Questi ...
- ZooKeeper 编程(一)
Zookeeper的节点都是存放在内存中的,所以读写速度很快.更新日志被记录到了磁盘中,以便用于恢复数据.在更新内在中节点数之前,会先序列化到磁盘中. 为避免单点失效,zookeeper的数据是在多个 ...
- 聊天界面之气泡文本cell(二)使用Autolayout
聊天界面主要是cell的动态高度计算和效率的问题,参考网上的两篇文章: 1.优化UITableViewCell高度计算的那些事 http://www.cocoachina.com/ios/20150 ...
- rpc选择标准
衡量RPC好用与否的几条标准: 真的像本地函数一样调用 使用简单,用户只需要关注业务即可 灵活,RPC调用的序列化方式可以自由定制,比如支持json,支持msgpack等方式 http://www.o ...
- Linux下I/O模型
Unix下共有五种I/O模型 1. 阻塞式I/O 2. 非阻塞式I/O 3. I/O复用(select和poll) 4. 信号驱动式I/O(SIGIO) 5. 异步I/O(POSIX的aio_系列函数 ...
- 介绍开源的.net通信框架NetworkComms框架之六 x509证书通信
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 许可是 ...
- MySQL 主从热备份(读写分离)
MySQL的主从备份,听个名词很高大上,其实都是MySQL原本就实现的了,你只需要简单配置一下就可以实现. 第一步:保持主从两个数据库是同步的,最好事先手动同步一下: 第二步:停止两个数据库,分别更改 ...
- Appcan跨域交互
案例1,sina微博登录,没有插件,因此采用web方式,我首先打开https://api.weibo.com/oauth2/authorize--,然后我想增加 一个取消按钮: 1 首先打开sina ...
- stage simulator
---恢复内容开始--- 运行自带地图 rosrun stage_ros stageros /opt/ros/indigo/share/stage_ros/world/willow-erratic.w ...