# 练习18.命名, 变量, 代码, 函数

标题包含的内容够多的吧?接下来我要教你“函数(function)”了!说到函数,不一样的人会对它有不一样的理解和使用方法,不过我只会教你现在能用到的最简单的使用方式。

函数可以做三样事情:

> 1. 它们给代码片段命名,就跟“变量”给字符串和数字命名一样。

> 1. 它们可以接受参数,就跟你的脚本接受`argv`一样。

> 1. 通过使用 #1 和 #2,它们可以让你创建“微型脚本”或者“小命令”。

python中你可以使用`def`新建函数。我将让你创建四个不同的函数,它们工作起来和你的脚本一样。然后我会演示给你各个函数之间的关系。

~~~

# this one is like your scripts with argv

def print_two(*args):

arg1, arg2 = args

print "arg1: %r, arg2: %r" % (arg1, arg2)

# ok, that *args is actually pointless, we can just do this

def print_two_again(arg1, arg2):

print "arg1: %r, arg2: %r" % (arg1, arg2)

# this just takes one argument

def print_one(arg1):

print "arg1: %r" % arg1

# this one takes no arguments

def print_none():

print "I got nothin'."

print_two("Zed","Shaw")

print_two_again("Zed","Shaw")

print_one("First!")

print_none()

~~~

让我们把地一个函数`print_two`分解一下,这个函数和你写脚本的方式差不多,因此你看上去应该会觉着比较眼熟:

> 1.首先我们告诉Python创建一个函数,我们使用到的命令是`def`,也就是“定义(define)”的意思。

> 1. 紧接着def的是函数的名称。本例中它的名称是`print_two`,但名字可以随便取,就叫`peanuts`也没关系。但函数名最好能够体现出函数的功能来。

> 1. 然后我们告诉函数我们需要`*args`,这和脚本的`argv`非常相似,参数必须放在圆括号 () 中才能正常工作。

> 1. 接着我们用冒号`:`结束本行,然后开始下一行缩进。

> 1. 冒号以下,使用4个空格缩进的行都是属于`print_two`这个函数的内容。 其中第一行的作用是将参数解包,这和脚本参数解包的原理差不多。

> 1. 为了演示它的工作原理,我们把解包后的每个参数都打印出来,这和我们在之前脚本练习中所作的类似。

函数`print_two`的问题是:它并不是创建函数最简单的方法。在 Python 函数中我们可以跳过整个参数解包的过程,直接使用`()`里边的名称作为变量名。这就是`print_two_again`实现的功能。

接下来的例子是`print_one`,它向你演示了函数如何接受单个参数。

最后一个例子是`print_none`,它向你演示了函数可以不接收任何参数。

> **Warning:**如果你不太能看懂上面的内容也别气馁。后面我们还有更多的练习向你展示如何创建和使用函数。现在你只要把函数理解成“迷你脚本”就可以了。

## 你看到的结果

运行上面的脚本会看到如下结果:

~~~

$ python ex18.py

arg1: 'Zed', arg2: 'Shaw'

arg1: 'Zed', arg2: 'Shaw'

arg1: 'First!'

I got nothin'.

$

~~~

你应该已经看出函数是怎样工作的了。注意到函数的用法和你以前见过的 `exists`、`open`,以及别的“命令”有点类似了吧?其实我只是为了让你容易理解才叫它们“命令”,它们的本质其实就是函数。也就是说,你也可以在自己的脚本中创建你自己的“命令”。

## 附加题

为自己写一个`函数注意事项`以供后续参考。你可以写在一个索引卡片上随时阅读,直到你记住所有的要点为止。注意事项如下:

> 1. 函数定义是以 `def` 开始的吗?

> 1. 函数名称是以字符和下划线 `_`组成的吗?

> 1. 函数名称是不是紧跟着括号 `(` ?

> 1. 括号里是否包含参数?多个参数是否以逗号隔开?

> 1. 参数名称是否有重复?(不能使用重复的参数名)

> 1. 紧跟着参数的是不是括号和冒号 `):` ?

> 1. 紧跟着函数定义的代码是否使用了 4 个空格的缩进 (indent)?

> 1. 函数结束的位置是否取消了缩进 (“dedent”)?

当你运行(或者说“使用use”或“调用call”)一个函数时,记得检查下面的点:

> 1. 调运函数时是否使用了函数的名称?

> 1. 函数名称是否紧跟着 `(`?

> 1. 括号后有无参数?多个参数是否以逗号隔开?

> 1. 函数是否以 `)` 结尾?

按照这两份检查表里的内容检查你的代码,直到你不需要检查表为止。

最后,将下面这句话阅读几遍:

~~~

‘运行函数(run)’、‘调用函数(call)’、和‘使用函数(use)’是同一个意思

~~~

## 常见问题

### Q:什么字符允许用在函数名上?

> 和变量命名规则相同。不能以数字开头,并且只能包含字母数字和下划线。

### Q:`*args` 中的星号`*`是干嘛的?

> 它告诉python把函数的所有参数组织一个列表放在`args`里。类似你之前用过的`argv`,只不过`*args`是用在函数里的,

### Q: 这个练习让我觉得枯燥

> 这是好事,说明你在输入代码方面做的越来越好,而且也能很好的明白这些代码是做什么的,想让练习不那么枯燥,输入我让你练习的代码,然后故意出错,检查你的错误并修复它们。

python函数的命名_18:命名, 变量, 代码, 函数相关推荐

  1. python变量必须以字母和下划线_【转载】关于python中带下划线的变量和函数的意义...

    Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就易于阅读, ...

  2. python中变量和函数的区别_关于python中带下划线的变量和函数 的意义

    Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就易于阅读, ...

  3. 关于python中带下划线的变量和函数 的意义

    转载:https://www.cnblogs.com/wangshuyi/p/6096362.html 总结: 变量: 1.  前带_的变量:  标明是一个私有变量, 只用于标明, 外部类还是可以访问 ...

  4. 关于python中带下划线的变量和函数 的意义,class类带一个下划线和带两个下划线的定义

    总结: 变量: 1.  前带_的变量:  标明是一个私有变量, 只用于标明, 外部类还是可以访问到这个变量 2.  前带两个_ ,后带两个_ 的变量:  标明是内置变量, 3.  大写加下划线的变量: ...

  5. python中定义变量为啥要用下划线_关于python中带下划线的变量和函数 的意义

    核心风格:避免用下划线作为变量名的开始. 因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始. 一般来讲,变量名_xxx被看作是"私有 ...

  6. php查看变量函数,介绍一些PHP判断变量的函数

    虽然这一特点使用PHP编程非常容易,但它也存在一个重要的缺陷:当你需要测试一个变量的类型时,处理类型比较松散的语言就让人有些迷惑.幸运地是,PHP的开发者注意到这一情况,因此在其中包含了一个函数工具包 ...

  7. php 类static引用函数吗,php中在变量和函数前加static关键字之后的区别

    static全局变量和普通全局变量,static局部变量和普通局部变量,static函数与普通函数的区别?下面本文将一一为你解答. (1)全局变量(外部变量)的说明之前再冠以static 就构成了静态 ...

  8. c语言 返回函数是结构体指针变量,一个函数返回值为指向结构体的指针的问题...

    一个函数返回值为指向结构体的指针的问题 #include #include struct student { int num; char name[10]; struct student *next; ...

  9. JS中定义式函数与变量时函数的差别

    2019独角兽企业重金招聘Python工程师标准>>> 在JS中代码的执行并不是一句一句的执行的,而是一段一段执行的,JS执行过程中,会把定义式函数语句提到最前面. //变量时函数 ...

最新文章

  1. as3绕过策略文件给视频截图
  2. ISA Server 2004 中的导出、导入和备份功能
  3. 显示电池电量的小工具
  4. 云笔记项目-Spring事务学习-传播MANDATORY
  5. 科普 | 12个关键词,告诉你到底什么是机器学习
  6. 文巾解题 46. 全排列
  7. openssl+poly1305+sm4实现
  8. [Java基础]自然排序Comparable的使用
  9. 学习手记(2020/8/19~2021/3/19)
  10. 从WebRtc学习RTCP协议
  11. 手机能上wifi电脑不行_锦囊在此(电脑手机如何配置使用WIFI)
  12. 计算机考研在线题库,考研全题库电脑版
  13. python交互式编程在哪里_终于明了python交互式编程入门
  14. 【渝粤教育】国家开放大学2018年秋季 0077-22T古代汉语专题 参考试题
  15. 重新理解创业:一个创业者的途中思考
  16. html5在线聊天模板,h5聊天室模板|仿微信聊天室html5
  17. mysql的pom文件在哪_Maven中pom文件详解
  18. python爬虫之数据存储(四):MySQL数据库
  19. 手机传感器数据导出_旧手机先别扔丨简单改造秒变黑科技监测器
  20. python:series详解和数据获取

热门文章

  1. 用计算机控制人造卫星和导弹的发射属于,2008年6月全国高校计算机等级考试(广西考区)一级笔试试题卷...
  2. linux mysql 密码文件怎么打开文件,Oracle数据库密码文件创建与使用
  3. 同一套代码,复制出来,变成另外一个项目
  4. 【转载】在华为敲代码那些年,我知道的这些事
  5. 字符串数组 和 字符串指针 的区别
  6. 5.2.2 OS之I/O设备假脱机技术(SPOOLing)
  7. sqlplus几个存储过程执行变量值窜掉了_基于大数据的冷连轧过程控制优化技术研究...
  8. html input 传值 request接到值为null,解决jsp向servlet传值为null的问题
  9. android处理服务器的集合,android集合SSH搭建服务器客户端请求
  10. sht20温湿度传感器原理图_温湿度传感器在孵化行业怎么应用