3 函数

3.1 定义函数

def fib(n):    # write Fibonacci series up to n
"""Print a Fibonacci series up to n."""
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a+b
print() # Now call the function we just defined:
fib(2000)
  • 关键字 def 引入一个函数 定义。它必须后跟函数名称和带括号的形式参数列表。构成函数体的语句从下一行开始,并且必须缩进
  • 函数的 执行 会引入一个用于函数局部变量的新符号表。 更确切地说,函数中所有的变量赋值都将存储在局部符号表中
  • 变量引用会首先在局部符号表中查找,然后是外层函数的局部符号表,最后是内置名称表。 因此,全局变量和外层函数的变量不能在函数内部直接赋值
def fib2(n):  # return Fibonacci series up to n
"""Return a list containing the Fibonacci series up to n."""
result = []
a, b = 0, 1
while a < n:
result.append(a) # see below
a, b = b, a+b
return result f100 = fib2(100) # call it
f100 # write the result
  • return 语句会从函数内部返回一个值。 不带表达式参数的 return 会返回 None。 函数执行完毕退出也会返回 None
  • result.append(a) 语句调用了列表对象 `result 的 方法 。方法是“属于”一个对象的函数
  • 不同的类型可以定义不同的方法,可以使用 定义自己的对象类型和方法

3.2 函数定义的多种形式

  • 最有用的形式是对一个或多个参数指定一个默认值。这样创建的函数,可以用比定义时允许的更少的参数调用
def ask_ok(prompt, retries=4, reminder='Please try again!'):
  • 不能对同一个参数多次赋值
  • 注意打印时关键字参数的顺序保证与调用函数时提供它们的顺序是相匹配的
  • 最后,最不常用的选项是可以使用任意数量的参数调用函数。这些参数会被包含在一个元组里。在可变数量的参数之前,可能会出现零个或多个普通参数。:
def parrot(voltage, state='a stiff', action='voom'):
print("-- This parrot wouldn't", action, end=' ')
print("if you put", voltage, "volts through it.", end=' ')
print("E's", state, "!") d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}
parrot(**d)
  • 可用 ** 将字典形式的实参赋给函数

3.3 Lambda表达式

这个函数返回两个参数的和: lambda a, b: a+b

也可用来排序

data = [[2, 3], [5, 4], [9, 6], [4, 7], [8, 1], [7, 2]]
data.sort(key=lambda x: x[0])
print(data)
#[[2, 3], [4, 7], [5, 4], [7, 2], [8, 1], [9, 6]] data.sort(key=lambda x:x[1])
print (data)
#[[8, 1], [7, 2], [2, 3], [5, 4], [9, 6], [4, 7]]

3.4 文档字符串

第一行应该是对象目的的简要概述。为简洁起见,它不应显式声明对象的名称或类型,因为这些可通过其他方式获得(除非名称恰好是描述函数操作的动词)。这一行应以大写字母开头,以句点结尾。

如果文档字符串中有更多行,则第二行应为空白,从而在视觉上将摘要与其余描述分开。后面几行应该是一个或多个段落,描述对象的调用约定,它的副作用等

def my_function():
"""Do nothing, but document it. No, really, it doesn't do anything.
"""
pass print(my_function.__doc__)
#Do nothing, but document it. #No, really, it doesn't do anything.

3.5 编码风格

  • 使用4个空格缩进,不要使用制表符。

    4个空格是一个在小缩进(允许更大的嵌套深度)和大缩进(更容易阅读)的一种很好的折中方案。制表符会引入混乱,最好不要使用它。

  • 换行,使一行不超过79个字符。

    这有助于使用小型显示器的用户,并且可以在较大的显示器上并排放置多个代码文件。

  • 使用空行分隔函数和类,以及函数内的较大的代码块。

  • 如果可能,把注释放到单独的一行。

  • 使用文档字符串。

  • 在运算符前后和逗号后使用空格,但不能直接在括号内使用: a = f(1, 2) + g(3, 4)

  • 以一致的规则为你的类和函数命名;按照惯例应使用 UpperCamelCase 来命名类,而以 lowercase_with_underscores 来命名函数和方法。 始终应使用 self 来命名第一个方法参数 (有关类和方法的更多信息请参阅 初探类)。

  • 如果你的代码旨在用于国际环境,请不要使用花哨的编码。Python 默认的 UTF-8 或者纯 ASCII 在任何情况下都能有最好的表现。

  • 同样,哪怕只有很小的可能,遇到说不同语言的人阅读或维护代码,也不要在标识符中使用非ASCII字符。

Python3.7.4入门-3函数的更多相关文章

  1. python3入门之函数

    相信大家学习过其他语言,懂得函数的作用.简单的说函数最好的作用就是可以使程序变得懒惰.python作为后起之秀,当然也会拥有函数这个有用的东西: 创建函数 使用def语句即可创建函数,如创建一个用来生 ...

  2. 最新Python3.6从入门到高级进阶实战视频教程

    点击了解更多Python课程>>> 最新Python3.6从入门到高级进阶实战视频教程 第1篇 Python入门导学 第2篇 Python环境装置 第3篇 了解什么是写代码与Pyth ...

  3. Python入门篇-函数、参数及参数解构

    Python入门篇-函数.参数及参数解构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.函数概述 1>.函数的作用即分类 函数 数学定义:y=f(x) ,y是x的函数,x ...

  4. Swift语法基础入门三(函数, 闭包)

    Swift语法基础入门三(函数, 闭包) 函数: 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被用于“调用”函数 格式: ...

  5. python3 第十六章 - 函数

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这被 ...

  6. 自学Python3.4-函数分类(匿名函数)

    自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...

  7. python3.7.1 内置函数

    python3.7.1 内置函数列表 内置函数 abs() delattr() hash() memoryview() set() all() dict() help() min() setattr( ...

  8. Python3.7.4入门-2流程控制工具

    2 流程控制工具 记得在语句后加冒号 2.1 while # Fibonacci series: # the sum of two elements defines the next a, b = 0 ...

  9. 1031: [编程入门]自定义函数之字符串反转(python)

    问题 1031: [编程入门]自定义函数之字符串反转 时间限制: 1Sec 内存限制: 128MB 提交: 7225 解决: 3331 题目描述 写一函数,使输入的一个字符串按反序存放,在主函数中输入 ...

随机推荐

  1. Feign详细构建过程及自定义扩展

    探究清楚 feign 的原理,自定义 feign 功能 **spring-cloud-openfeign-core-2.1.1.RELEASE.jar** 中 **HystrixFeign** 的详细 ...

  2. Integer 使用==判断127和超过128的数据的区别

    Integer封装类型字数据当超过一定长度后,若使用==来判断数否相等,那么判断的结果是false; Integer的范围是超过128就是false. 对于所有封装类而言,建议使用equals来进行判 ...

  3. layui下拉框不显示的问题

    1.先检查有没有引入layui.js 2.然后看有没有被<form class="layui-form"></form>包住, 3.查看是否有以下代码 &l ...

  4. 通过视图实现自定义查询<持续完善中。。。>

    目前实现: ----普通查询路径 /viewShow/viewShow/list.htm ----Echarts查询路劲 /viewShow/viewShow/echarts.htm 1.自定义查询条 ...

  5. OCP培训 MySQL OCP认证实战培训【低价送OCP考证名额】

    一.OCP培训 MySQL 5.7 OCP认证全套实战培训[低价送OCP考试名额] 课程目标: 风哥为满足想参加MySQL OCP考证的学员,而设计的一套比较全面OCP实战培训课程. 课程涉及MySQ ...

  6. Spring学习之旅(九)--SpringMVC高级技术

    文件上传 在 Web 应用中,允许用户上传文件是很常见的需求.文件上传通常是采用 multipart 格式,而 DispatcherServlet 并没有任何解析 multipart 请求数据的功能, ...

  7. lua_在C#中执行lua脚本

    方法一:使用DoString 代码为: Lua lua = new Lua();            lua.DoString("a=13");            lua.D ...

  8. python编写排列组合,密码生产功能

    python编写排列组合 python在编写排列组合是会用到  itertools 模块 排列 import itertools mylist = list(itertools.permutation ...

  9. 【HDU6035】 Colorful Tree

    题目的意思是:给定一个点带颜色的树,两点之间的距离定义为路径上不同颜色的个数.求所有点对间的距离和. 做法有点分治,还有传说中的虚树DP,树上差分. 点分治法: 考虑每个点的贡献,可以发现一个点的子树 ...

  10. 牛客2018国庆集训派对Day3 I Metropolis 多源最短路径

    传送门:https://www.nowcoder.com/acm/contest/203/I 题意: 求每个大都会到最近的一个大都会的距离. 思路: 把每个大都会设为起点,跑一遍最短路.在跑最短路的时 ...