Python3 From Zero——{最初的意识:007~函数}

一、编写可接受任意数量参数的函数:*、**

>>> def test(x, *args, y, **kwargs):
...  pass
...
>>> test(1, 2, 3, 4 ,5 ,5, y=9, aa=99, bb=88,cc=900)
>>> test(1, 2, 3, 4 ,5 ,5, 9, aa=99, bb=88,cc=900)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: test() missing 1 required keyword-only argument: ‘y‘

#以*打头的参数只能作为最后一个位置参数出现,以**打头的参数只能作为最后一个参数出现;*args之后仍然可以有其它的参数出现,但只能是关键字参数(keyword_only)

二、编写只接受关键字参数的函数

>>> def test(*, x, y):
...  pass
...
>>> test(8, 9)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: test() takes 0 positional arguments but 2 were given
>>> test(x=9, y=8)

#星号*之后的参数都是keyword_only参数

三、函数注解

>>> def add(x:int ,y:int) ->int:
...  return x + y
...
add.__annotations__
{‘x‘: <class ‘int‘>, ‘return‘: <class ‘int‘>, ‘y‘: <class ‘int‘>}

#函数注解只会保存在函数的__annotations__属性中;因为Python中没有类型声明,函数注解可以用于提示

四、从函数中返回多个值:各返回值之间以逗号“,”分隔,本质上是返回一个tuple,可通过tuple解包实现返回多个值的目的

>>> def myfun():
...  return 1, 2, 3
...
>>> x, y, z = myfun()
>>> x
1
>>> y
2
>>> z
3
>>> a = myfun()
>>> a
(1, 2, 3)

五、定义带有默认参数的函数

  默认参数只会在函数定义时被绑定一次

>>> x = 44
>>> def sample(a=x):
...  print(a)
...
>>> sample()
44
>>> x = 88
>>> sample()
44

  默认参数的默认值通常应该是不可变对象;若设置可变对象,应参照如下方式:

>>> def test(a, b=None):
...  if b is None:
...   b = []
...  pass
... 

六、让带有N个参数的可调用对象以较少的参数形式调用

  即:给一部分参数预先斌予固定值,相当于转化成一个带有默认值的函数

>>> def sum(a, b, c, d):
...  return a + b + c + d
...
>>> sum(1, 2, 3, 4)
10
>>> import functools
>>> test_0 = functools.partial(sum, b=2, c=3, d=4)
>>> test_0(1)
10
>>> test_0(100)
109

  也可使用lambda函数实现

>>> test_1 = lambda a, b=2, c=3, d=4: sum(a, b, c, d)
>>> test_1(1)
10
>>> test_1(100)
109
时间: 2024-10-02 10:49:00

Python3 From Zero——{最初的意识:007~函数}的相关文章

Python3 From Zero——{最初的意识:000~Initial consciousness『REVIEW』}

a.编码默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串,也可以为源码文件指定不同的编码:# -*- coding: cp-1252 -*- b.python保留字 保留字即关键字,我们不能把它们用作任何标识符名称.Python的标准库提供了一个keyword module,可以输出当前版本的所有关键字: >>> import keyword >>> keyword.kwlist ['False', 'None', 'T

Python3 From Zero——{最初的意识:数据结构和算法}

一.从队列两端高效插入.删除元素,及保留固定数量的数据条目: collections.deque([iterable[,maxlen=N]]) a = collections.deque([1, 2],maxlen=3) a.appendleft(3) [3, 1, 2] a.appendleft(4) [4, 3, 1] a.popleft() [3, 1] 二.求队列中最大或最小的N个元素 思路1:heapq.nlargest(N, iterable, key=None).heapq.nsm

Python3 From Zero——{最初的意识:006~数据编码与处理}

一.读写CSV数据: #!/usr/bin/env python3 #-*- coding=utf8 -*- import csv with open('kxtx.csv', 'rt') as f: f_csv = csv.DictReader(f) for x in f_csv: print(x) if x['货物名称'] == '电机': break [email protected] ~/py_script $ python3 csv_test.py {'开单网点组织编号': 'C0502

Python3 From Zero——{最初的意识:015~初级实例演练}

一.构显国际橡棋8x8棋盘 #!/usr/bin/env python3 #-*- coding:utf-8 -*- color_0="\033[41m \033[00m" color_1="\033[46m \033[00m" def line(a, b): for i in range(0,48): if ((i // 8) % 2) == 0: print(a, end='') else: print(b, end='') for x in range(0,

Python3 From Zero——{最初的意识:004~迭代器和生成器}

一.反向迭代:reversed() >>> a [1, 2, 3, 4] >>> for x in reversed(a): ... print(x, end=' ') ... 4 3 2 1 #反向迭代只有在待处理的对象具有确定的大小或者对象实现了__reversed()__特殊方法时才能奏效,否则必须先将对象转化为列表(可能消耗大量内存) >>> with open('/etc/passwd', 'rt') as file: ... for x i

关于python3.4版本中的zip函数

特别注意: 在window,显示变量 print(x);而在linux中 print x 例如,有两个列表: >>>a = [1,2,3] >>>b = [4,5,6] 使用zip()函数来可以把列表合并,并创建一个元组对的列表. >>>zip(a,b) [(1, 4), (2, 5), (3, 6)] #注意在Python3.4版本中,显示 >>> zip(a,b)<zip object at 0x01FB2E90> 如

python3中调用C语言的函数

一, 先用C语言写好一个函数库 #include<stdio.h> int add(int num1, int num2) { return num1 + num2; } int sub(int num1, int num2) { return num1 - num2; } int mul(int num1, int num2) { return num1 * num2; } int div(int num1, int num2) { return num1 / num2; } 二, 然后使用

Python3 函数式编程(高阶函数)

这一次主要是学习了一下Python3函数式编程思想,介绍了3个代表性高阶函数:map(), reduce(), filter().像 sorted() 其实也是高阶函数,可以接受函数作为参数.这篇学习笔记中编写了大量高阶函数,同时介绍了Python中的闭包,装饰器.这些思想和方法很美妙,我受益匪浅.当然这些都需要进一步运用和学习. 运行环境:Python3.6 + Jupyter notebook .caret, .dropup > .btn > .caret { border-top-col

Linux python3安装/shell脚本/if/循环/函数

python3安装 安装过程 安装包: wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgztar -xvf Python-3.7.0.tgz #解压 基础包 1.基础yum包 yum install gcc yum install zlib yum install zlib-devel yum install libffi-devel -y yum install openssl openssl-devel -y 检测平台: