【Python五篇慢慢弹(3)】函数修行知python
函数修行知python
作者:白宁超
2016年10月9日21:51:52
摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下。官方给出的pythondoc入门资料包含了基本要点。本文是对文档常用核心要点进行梳理,简单冗余知识不再介绍,作者假使你用c/java/c#/c++任一种语言基础。本系列文章属于入门内容,老鸟可以略看也可以略过,新鸟可以从篇一<快速上手学python>先接触下python怎样安装与运行,以及pycharm编辑器的使用和配置;篇二<数据结构看python>介绍python语言中控制语句、列表、字典、元组、循环等基本操作;篇三<函数修行知python>细解python语言函数的范畴与内容;篇四<模块异常谈python>采用登录的案例详解模块来龙去脉;篇五<‘类’过依然继续前行,直至ending再出发>介绍类的基本操作,扩展虚拟环境、标准类库和下个系列预告。(本文原创,转载注明出处:函数修行知python)
目录:
【Python五篇慢慢弹(1)】快速上手学python
【Python五篇慢慢弹(2)】数据结构看python
【Python五篇慢慢弹(3)】函数修行知python
【Python五篇慢慢弹(4)】模块异常谈python
【Python五篇慢慢弹(5)】‘类’过依然继续前行,直至ending再出发
1 函数关键字参数的调用
【小记】本文中所有代码经过测试均可正常运行,python有个问题就是复制后会破坏原有格式。所以读者复制运行时报如下错误:SyntaxError: expected an indented block,是因为空格问题,可以预留4个空格,或者采用tab键空格
实例演示:
1 2 3 4 5 6 7 8 9 10 11 12 | def parrot(voltage,state= 'a stiff' ,action= 'voom' , type= 'Norwegian Blue' ): print( "-- This parrot wouldn't" , action, end=' ') print( "if you put" , voltage, "volts through it." ) print( "-- Lovely plumage, the" , type) print( "-- It's" ,state, "!" ) parrot(1000) # 1 positional argument parrot(voltage=1000) # 1 keyword argument parrot(voltage=1000000, action= 'VOOOOOM' ) # 2 keyword arguments parrot(action= 'VOOOOOM' , voltage=1000000) # 2 keyword arguments parrot( 'a million' , 'bereft of life' , 'jump' ) # 3 positional arguments parrot( 'a thousand' , state= 'pushing up the daisies' ) # 1 positional, 1 keyword) |
运行结果:
解析:
def _parrot_(voltage,state='a stiff',action='voom', type='Norwegian Blue')
函数定义:def 定义函数。如def functionname([参数])
函数参数:1、可以有形参也可以不含形参。2、形参分为必选形参(如voltage)和可选形参(如state='a stiff')且必选形参在可选形参前。
必选形参与可选参数区别:当可选参数没有实参时,形参默认为设定值,如此例子默认a stiff;形参中必选参数和可选参数都可以设置多个,记住必选参数必须放在可选参数前。
函数体:不同于c/java/c#等使用{}包含函数体,python使用:后面根据格式块包含函数体,每个块前4个空格。
2、函数定义作用域实例
实例演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/usr/bin/env python # -*- coding: utf-8 -*- "" " __title__ = '' __author__ = 'cuitbnc' __mtime__ = '2016/10/9' # 欢迎进入我的主页:http://www.cnblogs.com/baiboy/. "" " i = 5 def funrange(arg=i): print(arg) i = 6 funrange(i) |
运行结果:
解析:
程序执行自上往下,i=5为全局变量赋值5,然后函数体;再次i=6,说明i索引指向值6,调用函数时候,i传入的值为6.
3、函数关键字的使用
实例演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #!/usr/bin/env python # -*- coding: utf-8 -*- "" " __title__ = '' __author__ = 'cuitbnc' __mtime__ = '2016/10/9' # 欢迎进入我的主页:http://www.cnblogs.com/baiboy/. "" " def _QA_(blogName, *arguments, **keywords): print( "-- 伏草惟存,你的博客地址是" , blogName, "?" ) print( "-- 奥,我知道这个博客:" , blogName) for arg in arguments: print(arg) print( "-" * 20+ "伏草惟存写过文章" + "-" * 20) keys = sorted(keywords.keys()) for kw in keys: print(kw, ":" , keywords[kw]) _QA_( "http://www.cnblogs.com/baiboy/" , "你是写过 NLP." , "你是写过 CRF." , "你是写过 Python." , "你是写过 GitHub." , NLP= "十分钟快览自然语言处理学习总结" , Python= "第一次python之旅:快速上手学Python" , CRF= "前戏:一起走进条件随机场(一)" , GitHub= "GitHub使用操作指南" ) |
运行结果:
解析:
1 | 函数QA(blogName, *arguments, **keywords)解析如下:<br>blogName:必选形参,前文已经介绍过。<br>*arguments:元组形参,原则上可以任意个,为一个元组进行传参,如(2,3, 'strubf' )<br>**keywords:关键字参数,又叫字典参数,仍然可以有多个参数,如( '小明' :18, '小花' :19, '小王' :23) |
4、函数可变参数的使用
实例演示:
1 2 3 4 5 6 7 8 9 | def _concat_(*args, sep= "/" ): return sep. join (args) str=_concat_( "earth" , "mars" , "venus" ) print(str) str1=_concat_( "earth" , "mars" , "venus" , sep= "." ) print(str1) str2=_concat_( "Java" , "Python" , "C#" , "C" , "R" , "Matlab" , "C++" , "JavaScript" ,sep= "\t" ) print(str2) |
运行结果:
解析:
1 | _concat_(*args, sep= "/" ):中*args元组参数,前文讲过。 |
1 | sep= "/" :指定格式进行参数预处理 |
5、参数列表的分拆,* 操作符来自动把参数列表拆开
实例演示:
1 2 3 4 5 6 7 | def _argList_(name, URL= 'man' , age= '18' ): print( "-- 我在博客园社区申请一个账号,名字是:" ,name, end= ' ' ) print( ".个人主页:" , URL, "欢迎访问." , end= ' ' ) print( "我在这里不断成长,今年" , age, "!" ) data = { "name" : "伏草惟存" , "URL" : "http://www.cnblogs.com/baiboy/" , "age" : "4岁7个月" } _argList_(**data) |
运行结果:
解析:
**data表示字典参数,前文介绍过,如果字典参数比较长我们可以将其封装到一个字典data里面,然后用**data传参。
end=' ': 表示连接成一句输出。
6、 Lambda 形式,Lambda 形式可以用于任何需要的函数对象
实例演示:
1 2 3 4 | def _makeincrementor_(n): return lambda x: x + n f = _makeincrementor_(42) print(f(1)) |
运行结果:
解析:
函数的调用很清晰不用说了,主要
lambda x: x + n
C#同学都比较熟悉这个形式了,x=x+n。f = _makeincrementor_(42)得出f=42,f(1)=x+1,此时x=42,故得出结果43
7、参考文献和推荐资料
- Python 官方网站 :包含代码、文档和 Web 上与 Python 有关的页面链接该网站镜像于全世界的几处其它问题,类似欧洲、日本和澳大利亚。镜像可能会比主站快,这取决于你的地理位置
- 快速访问 Python 的文档
- Python 包索引 :索引了可供下载的,用户创建的 Python 模块。如果你发布了代码,可以注册到这里,这样别人可以找到它
- The Scientific Python : 项目包括数组快速计算和处理模块,和大量线性代数、傅里叶变换、非线性solvers、随机数分布,统计分析以及类似的包
- 官方python学习文档
- 简明Python教程
- 廖雪峰:python教程
- Python官网文档
- 【51cto学院,入门课程】Python零基础入门学习视频教程
- 【个人博客:案例】GitHub数据提取与分析
- 【csdn】python知识库
- 【社区】python中文学习大本营
- 【个人博客】老王python
-
【51cto学院】如何用python开发跨平台的记事本视频课程
-
【51cto学院,网站开发】台湾辅仁大学:Python Django基础视频课程
-
【51cto学院,网站开发】用Python Django快速做出高大上的BBS论坛网站
作者:白宁超,工学硕士,现工作于四川省计算机研究院,研究方向是自然语言处理和机器学习。曾参与国家自然基金项目和四川省科技支撑计划等多个省级项目。著有《自然语言处理理论与实战》一书。 自然语言处理与机器学习技术交流群号:436303759 。
出处:http://www.cnblogs.com/baiboy/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架