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基础之包的导入和__init__.py的介绍
Jan 08 Python
Python中.join()和os.path.join()两个函数的用法详解
Jun 11 Python
python将回车作为输入内容的实例
Jun 23 Python
python 对txt中每行内容进行批量替换的方法
Jul 11 Python
python 产生token及token验证的方法
Dec 26 Python
利用Python实现Shp格式向GeoJSON的转换方法
Jul 09 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
Jul 11 Python
python动态文本进度条的实例代码
Jan 22 Python
实例代码讲解Python 线程池
Aug 24 Python
解决jupyter notebook图片显示模糊和保存清晰图片的操作
Apr 24 Python
Django集成富文本编辑器summernote的实现步骤
May 31 Python
Python语言内置数据类型
Feb 24 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中的使用情况
2015/11/05 PHP
Centos PHP 扩展Xchche的安装教程
2016/07/09 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
laravel框架中间件 except 和 only 的用法示例
2019/07/12 PHP
PHP7原生MySQL数据库操作实现代码
2020/07/03 PHP
IE9+已经不对document.createElement向下兼容的解决方法
2015/09/14 Javascript
JavaScript给input的value赋值引发的关于基本类型值和引用类型值问题
2015/12/07 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
2015/12/17 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
2016/01/22 Javascript
JQuery为元素添加样式的实现方法
2016/07/20 Javascript
基于AngularJS实现表单验证功能
2017/07/28 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
ionic2中使用自动生成器的方法
2018/03/04 Javascript
vue脚手架及vue-router基本使用
2018/04/09 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
vue使用echarts图表的详细方法
2018/10/22 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
[20:46]Ti4循环赛第三日VG vs DK
2014/07/12 DOTA
[02:38]2018年度DOTA2最佳劣单位选手-完美盛典
2018/12/17 DOTA
python基础教程之数字处理(math)模块详解
2014/03/25 Python
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
python 在屏幕上逐字显示一行字的实例
2018/12/24 Python
Python Django 封装分页成通用的模块详解
2019/08/21 Python
男女时尚与复古风格在线购物:RoseGal(全球免费送货)
2017/07/19 全球购物
skyn ICELAND官网:冰岛成分天然护肤品
2020/08/24 全球购物
科颜氏香港官方网店:Kiehl’s香港
2021/03/07 全球购物
Yahoo-PHP面试题4
2012/05/05 面试题
农村婚礼主持词
2014/03/13 职场文书
党支部公开承诺践诺书
2014/03/28 职场文书
商务经理岗位职责
2014/07/30 职场文书
婚礼证婚人演讲稿
2014/09/13 职场文书
2016大学优秀学生干部事迹材料
2016/03/01 职场文书
2019年家电促销广告语集锦
2019/10/21 职场文书
纯html+css实现打字效果
2021/08/02 HTML / CSS
css3属性选择器 “~”(波浪号) “,”(逗号) “+”(加号)和 “>”(大于号)
2022/04/19 HTML / CSS