Python中的自定义函数学习笔记


Posted in Python onSeptember 23, 2014

定义一个什么都不做的函数

>>> def a():

... pass

...
>>> def printHello():

... print("hello")

...

>>> printHello()

hello

>>> callable(printHello)

True

顾名思义,callable函数用于判断函数是否可以调用;

有书上说,callable在Python3.0中已经不再使用,而使用hasattr(func, '__call__')代替;

>>> hasattr(printHello, '__call__')

True

   

>>> printHello.__doc__

>>> def printHello():

... 'just print hello'

... print('hello')

...

>>> printHello.__doc__

'just print hello'
  
每个函数都有一个__doc__属性,双下划线表示它是个特殊属性;
  
内建的help函数非常有用,可以提供有关方法/函数的帮助信息;
>>> help(printHello)

Python中的自定义函数学习笔记

函数的注释信息包含其中;
  
虽然printHello函数没有使用return,可以用一个变量接收返回值:

>>> result = printHello()

hello

>>> result

>>> print(result)

None
 
None是Python的内建值,类似Javascript的undefined么?
  
定义一个可以接收参数的printStr,用以打印字符串
>>> def printStr(str):

... print(str)

…

   

>>> printStr("hello")

hello
  
像C++一样,Python支持默认参数
>>> def printStr(str="nothing"):

... print(str)

..

   

>>> printStr()

nothing

再来看看传参方式
>>> a = [1,2]

>>> def try_change_list(a):

... a[:] = [1,1,1]

...

>>> try_change_list(a)

>>> a

[1, 1, 1]

Python的传参可以理解为按值传递(同java,Javascript)?
  
BTW:如果不想让try_change_list改变原来的对象,可以传入a[:]
>>> a = [1,2]

>>> try_change_list(a[:])

>>> a

[1, 2]

当然,这里做的是浅拷贝,可以使用copy模块的deepcopy来进行深拷贝;
  
除了支持参数默认值,还支持命名传参:
>>> def sum(a=0, b=0):

... return a + b;

...

>>> sum(2,2)

4

>>> sum(b = 3, a = 4)

7

这种特性在参数较多时比较好用;
  
来看一下,Python对可变参数列表的支持:
>>> def sum(*args):

... s = 0;

... for i in args:

... s += i;

... return s

...

>>> sum(1,2,3,4)

10

这是一个简单的求和例子,不同于C/C++的静态类型,Python并不会限制传入sum函数的参数的类型:
>>> def printArs(*args):

... for a in args:

... print(a)

...

>>> printArs(2, 3, [2,2], (2,), 'df')

2

3

[2, 2]

(2,)

df

>>> printArs(*(2, 3, [2,2], (2,), 'df'))

2

3

[2, 2]

(2,)

df

>>> printArs(*[2, 3, [2,2], (2,), 'df'])

2

3

[2, 2]

(2,)

df

这里的args对应于Javascript的arguments;
  
除了使用使用元组(tuple)接收可变参数,还可以使用dictionary接收命名参数:
>>> def printArs(**args):

... for k in args:

... print(repr(k) + " = " + repr(args[k]))

...

>>>

>>> printArs(name='wyj', age=24)

'name' = 'wyj'

'age' = 24

>>> printArs(**{'name':'wyj', 'age':24})

'name' = 'wyj'

'age' = 24

当然,更复杂地,可以混合使用*arg, **arg, 默认值特性:
Python中的自定义函数学习笔记
Python 相关文章推荐
使用python BeautifulSoup库抓取58手机维修信息
Nov 21 Python
Python的Flask开发框架简单上手笔记
Nov 16 Python
python中的decorator的作用详解
Jul 26 Python
pandas pivot_table() 按日期分多列数据的方法
Nov 16 Python
基于树莓派的语音对话机器人
Jun 17 Python
Pandas分组与排序的实现
Jul 23 Python
Python中BeautifuSoup库的用法使用详解
Nov 15 Python
PyQt中使用QtSql连接MySql数据库的方法
Jul 28 Python
Python如何读写CSV文件
Aug 13 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
Aug 20 Python
python import 上级目录的导入
Nov 03 Python
Python Django / Flask如何使用Elasticsearch
Apr 19 Python
Python中的exec、eval使用实例
Sep 23 #Python
Python的高级Git库 Gittle
Sep 22 #Python
Python实现抓取网页并且解析的实例
Sep 20 #Python
跟老齐学Python之字典,你还记得吗?
Sep 20 #Python
跟老齐学Python之再深点,更懂list
Sep 20 #Python
跟老齐学Python之画圈还不简单吗?
Sep 20 #Python
跟老齐学Python之list和str比较
Sep 20 #Python
You might like
我的论坛源代码(九)
2006/10/09 PHP
php带密码功能并下载远程文件保存本地指定目录 修改加强版
2010/05/16 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
2007/11/30 Javascript
让 JavaScript 轻松支持函数重载 (Part 2 - 实现)
2009/08/04 Javascript
javascript中动态加载js文件多种解决办法总结
2013/11/15 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
js获取某元素的class里面的css属性值代码
2014/01/16 Javascript
轻松搞定jQuery.noConflict()
2016/02/15 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
jquery 正整数数字校验正则表达式
2017/01/10 Javascript
jQuery extend()详解及简单实例
2017/05/06 jQuery
在Vue中如何使用Cookie操作实例
2017/07/27 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
three.js如何实现3D动态文字效果
2021/03/03 Javascript
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
2017/06/14 Python
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
Python补齐字符串长度的实例
2018/11/15 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
python中property和setter装饰器用法
2019/12/19 Python
python实现快递价格查询系统
2020/03/03 Python
解决django框架model中外键不落实到数据库问题
2020/05/20 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
2021/01/15 Python
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
支教自我鉴定
2014/01/18 职场文书
同学聚会老师邀请函
2014/01/28 职场文书
2014村党支部书记党建工作汇报材料
2014/11/02 职场文书
见习报告格式要求
2014/11/04 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
python scrapy简单模拟登录的代码分析
2021/07/21 Python
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
2021/08/02 MySQL
python接口测试返回数据为字典取值方式
2022/02/12 Python
使用scrapy实现增量式爬取方式
2022/06/21 Python