iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中函数参数设置及使用的学习笔记
  • 872
分享到

Python中函数参数设置及使用的学习笔记

函数学习笔记参数设置 2022-06-04 19:06:18 872人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

一、参数和共享引用: In [56]: def changer(a,b): ....: a=2 ....: b[0]='spam' ....: In [57]: X=1 In

一、参数和共享引用:


In [56]: def changer(a,b):
  ....:   a=2
  ....:   b[0]='spam'
  ....:   
In [57]: X=1
In [59]: L=[1,2]
In [60]: changer(X,L)
In [61]: X,L
Out[61]: (1, ['spam', 2])

函数参数是赋值得来,在调用时通过变量实现共享对象,函数中对可变对象 参数的在远处修能够影响调用者。

避免可变参数修改:


In [67]: X=1
In [68]: a=X
In [69]: a=2
In [70]: print(X)
1
In [71]: L=[1,2]
In [72]: b=L
In [73]: b[0]='spam'
In [74]: print(L)
['spam', 2]
In [75]: changer(X,L[:]) 
#不想要函数内部在原处的修改影响传递给它的对象,可以创建一个对象的拷贝

In [77]: changer(a,b)
In [78]: def changer(a,b): 
....:   b=b[:] 
#如果不想改变传入对象,无论函数怎么调用,同样可以在函数内部进行拷贝。
....:   
In [79]: a=2
In [80]: b[0]='spam'

二、特定参数匹配模型:

函数匹配语法:

查看图片

例子:

关键字参数:


In [2]: def f(a,b,c):print (a,b,c)
In [3]: f(1,2,3) #位置参数调用
(1, 2, 3)
In [4]: f(c=3,b=2,a=1) #关键字参数调用
(1, 2, 3)

默认参数:


In [5]: def f(a,b=2,c=3):print (a,b,c)
In [6]: f(1)  #给a赋值,b,c使用默认赋值 
(1, 2, 3)
In [7]: f(a=1) 
(1, 2, 3)
In [8]: f(1,4) 
(1, 4, 3)
In [9]: f(1,4,5) #不适用默认值
(1, 4, 5)
In [10]: f(1,c=6) #a通过位置得到1,b使用默认值,c通过关键字得到6
(1, 2, 6)

三、任意参数:

1、收集参数:


#*和**出现在函数定义或函数调用中。

In [11]: def f(*args):print (args)
In [12]: f()  #将所有位置相关的参数收集到一个新的元祖中
()
In [13]: f(1)
(1,)
In [14]: f(1,2,3,4)
(1, 2, 3, 4)
In [15]: def f(**args):print (args)
In [16]: f() 
{}
In [17]: f(a=1,b=2) #**只对关键字参数有效
{'a': 1, 'b': 2}

In [19]: def f(a, *pargs,**kargs):print(a,pargs,kargs)
In [20]: f(1,2,3,4,5,6,x=1,y=2,z=3)
(1, (2, 3, 4, 5, 6), {'y': 2, 'x': 1, 'z': 3})

2、解包参数:

注意:不要混淆函数头部或函数调用时*/**的语法:在头部意味着收集任意数量的参数,而在调用时,它接驳任意数量的参数。


In [21]: def func(a,b,c,d):print(a,b,c,d)
In [22]: args=(1,2)
In [23]: args += (3,4)
In [24]: func(*args)
(1, 2, 3, 4)
In [25]: args={'a':1,'b':2,'c':3}
In [26]: args['d']=4
In [27]: func(**args)
(1, 2, 3, 4)
In [28]: func(*(1,2),**{'d':4,'c':4})
(1, 2, 4, 4)
In [30]: func(1,*(2,3),**{'d':4})
(1, 2, 3, 4)
In [31]: func(1,c=3,*(2,),**{'d':4})
(1, 2, 3, 4)
In [32]: func(1,*(2,3,),d=4)
(1, 2, 3, 4)
In [33]: func(1,*(2,),c=3,**{'d':4})
(1, 2, 3, 4)

3、应用函数通用性:


In [34]: def tracer(func,*pargs,**kargs):
  ....: print ('calling:',func.__name__)
  ....: return func(*pargs,**kargs)
  ....: 
In [35]: def func(a,b,c,d):
  ....: return a+b+c+d
  ....: print (tracer(func,1,2,c=3,d=4))
  ....: 
('calling:', 'func')
10

4、python3.X中废弃apply内置函数


In [36]: pargs=(1,2)
In [37]: kargs={'a':3,'b':4}
In [41]: def echo(*args,**kargs):print (args,kargs)
In [42]: apply(echo,pargs,kargs)
((1, 2), {'a': 3, 'b': 4})

运用解包调用语法,替换:


In [43]: echo(*pargs,**kargs)
((1, 2), {'a': 3, 'b': 4})
In [44]: echo(0,c=5,*pargs,**kargs)
((0, 1, 2), {'a': 3, 'c': 5, 'b': 4})

四、python3.x中Keyword-only参数

python3.x把函数头部的排序规则通用化了,允许我们指定keyWord-only参数,即按照关键字传递并且不会由一个位置参数来填充的参数;参数*args之后,必须调用关键字语法来传递。


In [1]: def kwonly(a,*b,c):
  ...: print(a,b,c) 
In [2]: kwonly(1,2,c=3)
1 (2,) 3
In [3]: kwonly(a=1,c=3)
1 () 3
In [4]: kwonly(1,2,3) #c必须按照关键字传递
TypeError: kwonly() missing 1 required keyword-only argument: 'c'

In [6]: def kwonly(a,*,b,c):print(a,b,c)
In [7]: kwonly(1,c=3,b=2)
1 2 3
In [8]: kwonly(c=3,b=2,a=1)
1 2 3
In [9]: kwonly(1,2,3)
TypeError: kwonly() takes 1 positional argument but 3 were given

1、排序规则:

**不能独自出现在参数中,如下都是错误用法:


In [11]: def kwonly(a,**pargs,b,c):
  ....: 
 File "<ipython-input-11-177c37879903>", line 1
def kwonly(a,**pargs,b,c):  ^
SyntaxError: invalid syntax

In [13]: def kwonly(a,**,b,c):
  ....: 
 File "<iPython-input-13-46041ada2700>", line 1
def kwonly(a,**,b,c):
  ^
SyntaxError: invalid syntax

也就是说一个函数头部,keyword-only参数必须编写在*args任意关键字形式之前,或者出现在args之前或者之后,并且可能包含在**args中。


In [14]: def f(a,*b,**d,c=6):print(a,b,c,d)
 File "<ipython-input-14-43c901fce151>", line 1
def f(a,*b,**d,c=6):print(a,b,c,d)
 ^
SyntaxError: invalid syntax
In [15]: def f(a,*b,c=6,**d):print(a,b,c,d) #keyword-only在*args之后,**args之前
In [16]: f(1,2,3,x=4,y=5)
1 (2, 3) 6 {'x': 4, 'y': 5}

In [20]: f(1,c=7,*(2,3),**dict(x=4,y=5)) #keyword-only在
1 (2, 3) 7 {'x': 4, 'y': 5}
In [21]: f(1,*(2,3),**dict(x=4,y=5,c=7))
1 (2, 3) 7 {'x': 4, 'y': 5}

2、为什么使用keyword-only参数?

很容易允许一个函数既接受任意多个要处理的位置参数,也接受作为关键字传递的配置选项, 可以减少代码,如果没有它的话,必须使用*args和**args,并且手动地检查关键字。

3、min调用

编写一个函数,能够计算任意参数集合和任意对象数据类型集合中的最小值。

方法一:使用切片


In [23]: def min(*args):
  ....: res=args[0]
  ....: for arg in args[1:]:
  ....: if arg < res:
  ....: res = arg
  ....: return res
  ....:

方法二:让python自动获取,避免切片。


In [28]: def min2(first,*rest):
  ....: for arg in rest:
  ....: if arg < first:
  ....: first = arg
  ....: return first
  ....:

方法三:调用内置函数list,将元祖转换为列表,然后调用list内置的sort方法实现。 注意:因为python sort列程是以C写出的,使用高度优化算法,运行速度要比前2中快很多。


In [32]: def min3(*args):
  ....: tmp=list(args)
  ....: tmp.sort()
  ....: return tmp[0]
  ....:

In [29]: min2(3,*(1,2,3,4))
Out[29]: 1
In [31]: min(*(5,6,6,2,2,7))
Out[31]: 2
In [33]: min3(3,4,5,5,2)
Out[33]: 2

五、例子:

1、模拟通用set函数:

编写一个函数返回两个序列的公共部分,编写inter2.py文件如下:


#!/usr/bin/python3
def intersect(*args):
  res=[]
  for x in args[0]:
    for other in args[1:]:
      if x not in other: break
    else:
      res.append(x)
  return res
def uNIOn(*args):
  res=[]
  for seq in args:
    for x in seq:
      if not x in res:
        res.append(x)
  return res

测试:


In [3]: from inter2 import intersect,union
In [4]: s1,s2,s3="SPAM","SCAM","SLAM"
In [5]: intersect(s1,s2),union(s1,s2)
Out[5]: (['S', 'A', 'M'], ['S', 'P', 'A', 'M', 'C'])
In [6]: intersect([1,2,3],(1,4))
Out[6]: [1]
In [7]: intersect(s1,s2,s3)
Out[7]: ['S', 'A', 'M']
In [8]: union(s1,s2,s3)
Out[8]: ['S', 'P', 'A', 'M', 'C', 'L']

2、模拟python 3.x print函数

编写文件python30.py

(1)使用*args和**args方法

环境python2.7


#!/usr/bin/python
import sys
def print30(*args,**kargs):
  sep = kargs.get('sep',' ')
  end = kargs.get('end','n')
  file = kargs.get('file',sys.stdout)
  if kargs:raise TypeError('extra keywords: %s' %kargs)
  output = ''
  first = True
  for arg in args:
    output += ('' if first else sep)+str(arg)
    first = False
  file.write(output + end)

交互结果:


In [5]: print30(1,2,3)
1 2 3
In [6]: print30(1,2,3,sep='')
123
In [7]: print30(1,2,3,sep='...')
1...2...3
In [8]: print30(1,[2],(3,),sep='...')
1...[2]...(3,)
In [9]: print30(4,5,6,sep='',end='')
456
In [11]: print30(1,2,3)
1 2 3

In [12]: print30()

(2)使用keyword-only方法,实现效果和方法一一样:


#!/usr/bin/python3
import sys
def print30(*args,sep=' ',end='n',file=sys.stdout):
  output = ''
  first=True
  for arg in args:
    output += ('' if first else sep) + str(arg)
    first = False
  file.write(output + end)

--结束END--

本文标题: Python中函数参数设置及使用的学习笔记

本文链接: https://www.lsjlt.com/news/14962.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python学习笔记3:函数和参数
    函数 函数的参数和返回值 形参(形式参数): 在函数定义的时候用到的参数没有具体值,只是一个占位的符号,成为形参,下例中的peison 实参(实际参数): 在调用函数的时候输入的值:下例中的明月 def hello(person): ...
    99+
    2023-01-31
    函数 学习笔记 参数
  • python学习笔记 函数
    一等函数 在python中,函数是一等对象。编程语言理论家把“一等对象”定义为满足以下条件的程序实体: 在运行时创建 能赋值给变量或数据结构中的元素 能作为参数传给函数 能作为函数的返回结果 在python中,整数、字符串和字典都是一...
    99+
    2023-01-31
    函数 学习笔记 python
  • Python学习笔记4——函数
    函数 1 # 函数需要先定义,关键字 def 2 def func(): 3 print("我是一个函数") 4 5 # 函数的调用 6 func() 执行结果: 我是一个函数 内建函数(内置函数) help(), prin...
    99+
    2023-01-30
    函数 学习笔记 Python
  • Python 3 学习笔记:函数(一)
    函数可以理解成实现某一功能的一系列代码的集合,这样做有一个最明显的好处就是,如果我们需要反复使用某个功能,使用函数只需要写一遍这些语句,然后就可以在程序中调用这个函数,而不再需要重新写一遍这些语句。 创建 & 调用 创建函数 创建函...
    99+
    2023-01-31
    函数 学习笔记 Python
  • python学习笔记(3) -- 常用数
    1.数字类型python的数字类型分为 ×××、长整型、浮点型、布尔型、复数型。(python没有字符类型)整型: ×××可以用 二进制、八进制、十六进制表示 默认是十进制。除十进制外其他三种需要加前缀:二进制(0b)、八进制(0o)、...
    99+
    2023-01-31
    学习笔记 常用 python
  • ES6学习笔记之let、箭头函数和剩余参数
    目录一.let,var,const区别letconst区别二,解构 1 数组解构2对象解构.3 字符串解构三,箭头函数 1 基础语法2 省略写法3 对象...
    99+
    2024-04-02
  • [Python学习笔记] 数字类型及操作
    数字类型 整数类型 十进制:1110,-123 二进制:以0B或0b开头 0b110,-0B101 八进制:以0O或0o开头 0o123,-0O567 十六进制:以0X或0x开头 0x555,-0X89a 浮点数类型...
    99+
    2023-01-31
    学习笔记 类型 操作
  • 【Python_requests学习笔记(三)】requests模块中params参数用法
    requests模块中params参数用法 前言 此篇文章中介绍requests模块中的查询参数params的详细用法和使用环境。 正文 1、params参数介绍 requests模块发送请求时,有两...
    99+
    2023-09-29
    python 爬虫 requests params
  • PHP学习笔记:函数的定义与调用
    在PHP中,函数是一段可以重复使用的代码块。函数能够提高代码的可读性和重用性,使代码更加模块化。本文将介绍如何定义和调用PHP函数,并给出具体的代码示例。一、函数的定义在PHP中,函数的定义使用关键字function。函数定义的一般语法如下...
    99+
    2023-10-21
    PHP函数定义调用
  • pygame学习笔记之设置字体及显示中文
    目录一、获得可用字体二、字体的中英文对照三、设置字体四、拓展总结一、获得可用字体 import pygame print(pygame.font.get_fonts()) 结果:...
    99+
    2024-04-02
  • PHP学习笔记:数组的使用与操作
    导言:数组是一种常用的数据结构,在PHP中也是一个重要的数据类型。掌握数组的使用与操作,可以帮助我们更好地组织和处理数据。本篇文章将介绍数组的基本概念、创建与初始化数组、访问数组元素、添加与删除数组元素、数组的遍历与排序等操作,并附上具体的...
    99+
    2023-10-21
    学习 PHP 数组
  • Python 实时学习笔记:路径设置是学习的关键吗?
    Python 是一种灵活的编程语言,它能够在各种不同的平台上运行。它具有简洁的语法,易于学习和使用。但是对于初学者来说,路径设置可能会成为一个困扰他们的问题。在本文中,我们将探讨路径设置在 Python 学习中的重要性,并提供一些示例代码...
    99+
    2023-11-01
    实时 学习笔记 path
  • 如何在 Go 中正确地使用函数?学习笔记分享!
    Go 是一种强类型、静态类型的编程语言,它提供了一种简单、高效的方式来编写并发程序。在 Go 中,函数是一种非常重要的概念,因为它们是组织代码的基本单位。在本文中,我们将深入了解如何在 Go 中正确地使用函数。 函数的定义 在 Go 中,函...
    99+
    2023-08-19
    函数 开发技术 学习笔记
  • C语言断言函数assert()的学习笔记
      在C语言库函数中提供了一个辅助调试程序的小型库,它是由assert()宏组成,接收一个整形表达式作为参数。如果表达式的值为假(非零),则assert()宏...
    99+
    2024-04-02
  • 【MongoDB学习笔记24】MongoDB的explain和hint函数
    一、explain函数explain函数可以提供大量查询相关的信息,如果是慢查询,它最重要的诊断工具。例如:在有索引的字段上查询:> db.post.find({"loc.city":"ny...
    99+
    2024-04-02
  • 「Python 学习笔记」中,如何使用 Django shell?
    Python 是一门高级编程语言,而 Django 是基于 Python 的一个开源 Web 框架。在 Django 中,shell 是一个非常重要的命令行工具,它可以让开发者在控制台中直接与 Django 应用程序交互。在本文中,我们将会...
    99+
    2023-11-02
    学习笔记 django shell
  • Python编程算法学习笔记:如何使用load函数在Python中读取文件?
    在Python编程中,读取文件是一个非常基础的操作。Python中有许多方法可以读取文件,其中最常用的方法之一就是使用load函数。load函数是Python中的一个内置函数,它可以将一个文件中的数据读取到一个变量中。 使用load函数读...
    99+
    2023-06-23
    编程算法 学习笔记 load
  • 你知道如何在学习笔记中使用 ASP 函数对象吗?
    ASP(Active Server Pages)是一种基于服务器的脚本语言,它允许开发人员动态地生成HTML,XML或其他类型的文档。在学习ASP时,学习笔记是非常重要的。在这篇文章中,我们将讨论如何在学习笔记中使用ASP函数对象。 ASP...
    99+
    2023-10-10
    函数 学习笔记 对象
  • 学习笔记:如何在PHP中使用数组存储数据?
    PHP是一种强大的编程语言,它提供了各种各样的数据结构,其中数组是最常用的之一。使用数组可以方便地存储和访问数据。在本文中,我们将学习如何在PHP中使用数组存储数据。 创建数组 在PHP中,可以使用array()函数创建一个数组。该函数...
    99+
    2023-08-05
    存储 学习笔记 数组
  • 学习笔记中的对象如何与 ASP 函数相互作用?
    在 ASP 编程中,对象是不可或缺的一部分。对象是 ASP 中的一个基础概念,它们是用来组织和管理代码的重要工具。而学习笔记中的对象,更是在 ASP 编程中扮演着重要的角色。本文将会介绍学习笔记中的对象如何与 ASP 函数相互作用,并提供...
    99+
    2023-10-10
    函数 学习笔记 对象
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作