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中的Django框架中prefetch_related()函数对数据库查询的优化
Apr 01 Python
Python实现比较两个文件夹中代码变化的方法
Jul 10 Python
python判断字符串编码的简单实现方法(使用chardet)
Jul 01 Python
基于Django模板中的数字自增(详解)
Sep 05 Python
用Python将一个列表分割成小列表的实例讲解
Jul 02 Python
python实现图片彩色转化为素描
Jan 15 Python
如何爬取通过ajax加载数据的网站
Aug 15 Python
python虚拟环境模块venv使用及示例
Mar 04 Python
Django 404、500页面全局配置知识点详解
Mar 10 Python
python datetime处理时间小结
Apr 16 Python
Python实现仿射密码的思路详解
Apr 23 Python
python--shutil移动文件到另一个路径的操作
Jul 13 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
php 静态化实现代码
2009/03/20 PHP
PHP数组交集的优化代码分析
2011/03/06 PHP
PHP MVC框架skymvc支持多文件上传
2016/05/26 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
Javascript 不能释放内存.
2006/09/07 Javascript
javascript AutoScroller 函数类
2009/05/29 Javascript
ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
2012/02/03 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
NodeJS学习笔记之网络编程
2014/08/03 NodeJs
原生JavaScript实现Ajax的方法
2016/04/07 Javascript
vue.js入门教程之基础语法小结
2016/09/01 Javascript
js 模仿锚点定位的实现方法
2016/11/19 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
微信小程序调用PHP后台接口 解析纯html文本
2017/06/13 Javascript
jquery单击文字或图片内容放大并居中显示
2017/06/23 jQuery
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
解决百度Echarts图表坐标轴越界的方法
2018/10/17 Javascript
JS实现transform实现扇子效果
2020/01/17 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
vue中echarts图表大小适应窗口大小且不需要刷新案例
2020/07/19 Javascript
[04:31]2016国际邀请赛中国区预选赛妖精采访
2016/06/27 DOTA
python中子类继承父类的__init__方法实例
2016/12/15 Python
python函数式编程学习之yield表达式形式详解
2018/03/25 Python
python解压TAR文件至指定文件夹的实例
2019/06/10 Python
python日期相关操作实例小结
2019/06/24 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
2020/07/13 Python
HTML5应用之文件上传
2016/12/30 HTML / CSS
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
《九寨沟》教学反思
2014/04/08 职场文书
个人四风对照检查材料
2014/09/26 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书
导游词之香港-太平山顶
2019/10/18 职场文书
Winsows11性能如何? win11性能测评多核竟比Win10差了10%
2021/11/21 数码科技
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
2022/04/06 Python