笔记-python-tutorial-4.controlflow( and function)

1.      函数

1.1.    定义函数

def name(x):

“””函数的第一行语句可以是可选的字符串文本,即函数的文档字符串,或docstring”””

if x>= 0:

return x

空函数

def nop():

pass

函数引用的实际参数在函数调用时引入局部符号表,实参总是传值调用

函数可返回多个值,但实际返回的是一个tuple

2、 默认参数值

def ask_ok(promt,retries=4,complaint=’yes or no.’)

3、 引用

如果函数保存到.py文件中,使用

from file_name import func_name()

来导入函数,注意文件名不包括.py

2.      函数相关

2.1.    函数参数

1.位置参数

2.default argument values:

def ask_ok(prompt, retries = 4, reminder=’Please try again!’):

注意:默认参数的值仅在编译时确认一次,此后不在修改

i = 5

def f(arg=i):

print(arg)

i = 6

f() #print 5

这在默认参数引用空表时会导致结果异常

def f(a, L=[]):

    L.append(a)

    return L

 

print(f(1))

print(f(2))

print(f(3))

This will print

[1]

[1, 2]

[1, 2, 3]

解决办法是

def f(a, L=None):

if L is None:

L = []

L.append(a)

return L

3.keyword argument:

def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):

注意关键字参数必需跟在位置参数后面;

4.可变参数: *argv

定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数:

def calc(*numbers):

sum = 0

for n in numbers:

sum = sum + n * n

return sum

calc(*nums)

5.unpacking argument lists

>>> list(range(3, 6))            # normal call with separate arguments

[3, 4, 5]

>>> args = [3, 6]

>>> list(range(*args))            # call with arguments unpacked from a list

[3, 4, 5]

有点像指针,第2个函数调用时,如果不使用*,range得到的是一个数组,需要将这个数组分解为2 个参数再传递给range()。

类似的,使用**也可以解包dictionaries形式的参数。

>>> 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)

-- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !

2.2.    lambda expressions

>>> def make_incrementor(n):

...     return lambda x: x + n

...

>>> f = make_incrementor(42)

>>> f(0)

42

>>> f(1)

43

make返回的是一个函数,因此f是一个函数。

>>> f

<function make_incrementor.<locals>.<lambda> at 0x0000006D285F2E18>

>>> f(4)

46

尽量少这么写,写多了总会坑人的。

2.3.    document strings

常用案例:

>>> 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.

2.4.    function annotations

函数注释,没搞太明白。

>>> def f(ham: str, eggs: str = 'eggs') -> str:

...     print("Annotations:", f.__annotations__)

...     print("Arguments:", ham, eggs)

...     return ham + ' and ' + eggs

...

>>> f('spam')

Annotations: {'ham': <class 'str'>, 'return': <class 'str'>, 'eggs': <class 'str'>}

Arguments: spam eggs

'spam and eggs'

笔记-python-tutorial-4.controlflow( and function)的更多相关文章

  1. Python Tutorial笔记

    Python Tutorial笔记 Python入门指南 中文版及官方英文链接: Python入门指南 (3.5.2) http://www.pythondoc.com/pythontutorial3 ...

  2. Python Tutorial 学习(六)--Modules

    6. Modules 当你退出Python的shell模式然后又重新进入的时候,之前定义的变量,函数等都会没有了. 因此, 推荐的做法是将这些东西写入文件,并在适当的时候调用获取他们. 这就是为人所知 ...

  3. 笔记-python -asynio

    笔记-python -asynio 1.      简介 asyncio是做什么的? asyncio is a library to write concurrent code using the a ...

  4. 笔记-python lib-pymongo

    笔记-python lib-pymongo 1.      开始 pymongo是python版的连接库,最新版为3.7.2. 文档地址:https://pypi.org/project/pymong ...

  5. 笔记-python tutorial-9.classes

    笔记-python tutorial-9.classes 1.      Classes 1.1.    scopes and namespaces namespace: A namespace is ...

  6. [译]The Python Tutorial#5. Data Structures

    [译]The Python Tutorial#Data Structures 5.1 Data Structures 本章节详细介绍之前介绍过的一些内容,并且也会介绍一些新的内容. 5.1 More ...

  7. [译]The Python Tutorial#4. More Control Flow Tools

    [译]The Python Tutorial#More Control Flow Tools 除了刚才介绍的while语句之外,Python也从其他语言借鉴了其他流程控制语句,并做了相应改变. 4.1 ...

  8. [译]The Python Tutorial#6. Modules

    [译]The Python Tutorial#Modules 6. Modules 如果你从Python解释器中退出然后重新进入,之前定义的名字(函数和变量)都丢失了.因此,如果你想写长一点的程序,使 ...

  9. [译]The Python Tutorial#9. Classes

    写在前面 本篇文章是<The Python Tutorial>(3.6.1),第九章,类的译文. 9. Classes 与其他编程语言相比,Python的类机制定义类时,最小化了新的语法和 ...

  10. [Notes] Learn Python2.7 From Python Tutorial

    I have planed to learn Python for many times. I have started to learn Python for many times . Howeve ...

随机推荐

  1. Sublime Text插件列表

    本文由 伯乐在线 - 艾凌风 翻译,黄利民 校稿.英文出处:ipestov.com.欢迎加入翻译组. 本文收录了作者辛苦收集的Sublime Text最佳插件,很全. 最佳的Sublime Text ...

  2. 7天学完Java基础之0/7

    笔记-7天学完Java基础之0/7 1.常用命令提示符(cmd) 启动:Win+R,输入cmd​

  3. pandas:数据分析

    一.介绍 pandas是一个强大的Python数据分析的工具包,是基于NumPy构建的. 1.主要功能 具备对其功能的数据结构DataFrame.Series 集成时间序列功能 提供丰富的数学运算和操 ...

  4. python之re模块和正则表达式

    今天我们来谈谈python中模块的使用,在探讨模块前先来了解一下正则表达式的具体用法. 1.正则表达式 正则表达式就是匹配 字符串内容的一种规则.谈到正则就和字符串相关了,首先我们要知道什么是字符组. ...

  5. 程序运行的cpu时间

    time.clock() 测量CPU时间,比较精准,通过比较程序运行前后的CPU时间差,得出程序运行的CPU时间.

  6. IO多路复用丶基于IO多路复用+socket实现并发请求丶协程

    一丶IO多路复用 IO多路复用指:通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作 IO多路复用作用: 检测多个socket是否已经发生变 ...

  7. ps钢笔工具路径问题

    问题描述:ps钢笔工具画出路径后用文字工具打字 路径出现一个空心圆点字,不能在路径上打字或者无法确认终止的位置. 解决:1.如果要在路径上全都打满字,要将文字对齐改为左对齐,2.如果要实现自定义结束位 ...

  8. Flash图表控件FusionCharts调整图表百分比大小

    用户可以为图表的宽度和高度设置百分比值,用来替代绝对的像素值. 以百分比的方式调整图表,首先需要更新HTML代码,如下所示: <div id="chartContainer" ...

  9. 五、c++实现离散傅里叶变换

    C++离散傅里叶变换 一.序言: 该教程基于之前的图像处理类MYCV,是对其的补充. 二.设计目标 对图像进行简单的离散傅里叶变换,并输出生成的频谱图. 三.需要提前掌握的知识 二维傅里叶变换公式: ...

  10. linux 命令——54 ping(转)

    Linux系统的ping 命令是常用的网络命令,它通常用来测试与目标主机的连通性,我们经常会说“ping一下某机器,看是不是开着”.不能打开网页时会说“你先ping网关地 址192.168.1.1试试 ...