html绑定带有形参的函数,Python中函数参数类型和参数绑定
參數(shù)類型
Python函數(shù)的參數(shù)類型一共有五種,分別是:
POSITIONAL_OR_KEYWORD(位置參數(shù)或關(guān)鍵字參數(shù))
VAR_POSITIONAL(可變參數(shù))
KEYWORD_ONLY(關(guān)鍵字參數(shù))
VAR_KEYWORD(可變關(guān)鍵字參數(shù))
POSITIONAL_ONLY(位置參數(shù))
下面用舉幾個例子解釋一下這5個參數(shù)類型的含義:
POSITIONAL_OR_KEYWORD如其名所見,既可以用位置傳參,也可以用關(guān)鍵字傳參,并且他沒有任何*的聲明
>>> def foo(name):
... print(name)
...
>>> foo("hello")
hello
>>> foo(name="hello")
hello
VAR_POSITIONAL是可變參數(shù),通過*來聲明,它會把接收到的值存入一個元組
>>> def foo(*args):
... print(args)
...
>>> foo(1, 2, 3, 4, 5)
(1, 2, 3, 4, 5)
KEYWORD_ONLY只能通過關(guān)鍵字傳參,這種參數(shù)會在VAR_POSITIONAL參數(shù)類型的后面,而且不帶**前綴,如同語義,只能通過指定關(guān)鍵字來傳參,不可以用位置傳參
>>> def foo(n1, *, n2):
... print(n1, n2)
...
>>> foo("hello", n2="world")
hello world
VAR_KEYWORD是可變關(guān)鍵字參數(shù),通過前綴**來聲明,這種參數(shù)類型可以接收0個或多個參數(shù),并存入一個字典
>>> def foo(**kwargs):
... for key, value in kwargs.items():
... print("%s=%s" % (key, value))
...
>>> foo(a=1, b=2, c=3)
a=1
b=2
c=3
POSITIONAL_ONLY是第五個參數(shù)類型,但是它已經(jīng)不重要了,因為高版本的Python無法創(chuàng)建一個POSITIONAL_ONLY類型的參數(shù),但是有些使用C語言實現(xiàn)且不接收關(guān)鍵字參數(shù)的函數(shù)(如divmod)支持
從下面的例子,我們可以看到,新定義的foo函數(shù),每個參數(shù)都對應(yīng)到上面的一個類型
>>> def foo(name, *args, middle=None, **kwargs):
... print("name:", name)
... print("args:", args)
... print("middle:", middle)
... print("kwargs:", kwargs)
...
>>> foo("hello", 1, 2, 3, middle="world", a=1, b=2, c=3)
name: hello
args: (1, 2, 3)
middle: world
kwargs: {'a': 1, 'b': 2, 'c': 3}
>>> my_foo = {"name": "hello", "middle": "world", "a": "1", "b": "2", "c": "3"}
>>> foo(**my_foo)
name: hello
args: ()
middle: world
kwargs: {'a': '1', 'b': '2', 'c': '3'}
>>> from inspect import signature
>>> sig = signature(foo)
>>> for name, param in sig.parameters.items():
... print(param.kind, ":", name, '=', param.default)
...
POSITIONAL_OR_KEYWORD : name =
VAR_POSITIONAL : args =
KEYWORD_ONLY : middle = None
VAR_KEYWORD : kwargs =
參數(shù)綁定
將函數(shù)的參數(shù)綁定到一個字典上
>>> def foo(name, *args, middle=None, **kwargs):
... print("name:", name)
... print("args:", args)
... print("middle:", middle)
... print("kwargs:", kwargs)
...
>>> my_foo = {"name": "hello", "middle": "world", "a": "1", "b": "2", "c": "3"}
>>> from inspect import signature
>>> sig = signature(foo)
>>> bound_args = sig.bind(**my_foo)
>>> for name, value in bound_args.arguments.items():
... print(name, '=', value)
...
name = hello
middle = world
kwargs = {'a': '1', 'b': '2', 'c': '3'}
>>> del my_foo["name"]
>>> bound_args = sig.bind(**my_foo)
Traceback (most recent call last):
...
TypeError: missing a required argument: 'name'
在inspect模塊的幫助下,展示了Python數(shù)據(jù)模型把實參綁定給函數(shù)調(diào)用的形參的機制,這與解釋器使用的機制相同,當我們刪除字典中的name,執(zhí)行時會報錯缺少name參數(shù)。
再者,我們使用operator模塊進行參數(shù)綁定
>>> from operator import methodcaller
>>> s = "The time has come"
>>> upcase = methodcaller("upper")
>>> upcase(s)
'THE TIME HAS COME'
>>> hiphenate = methodcaller("replace", " ", "-")
>>> hiphenate(s)
'The-time-has-come'
如上,methodcaller創(chuàng)建的函數(shù)會在對象上調(diào)用參數(shù)指定的方法,我們可以自己建立一個對象并生成自己的方法,再用methodcaller調(diào)用
class Person:
def __init__(self, name):
self.name = name
def say(self, text):
print(self.name, 'say:', text)
p = Person("John")
person_say = methodcaller("say", "hello")
person_say(p)
最后會打印:
John say: hello
使用function.partial凍結(jié)參數(shù)
function.partial這個高階函數(shù)用于部分應(yīng)用函數(shù),部分應(yīng)用是指,基于一個函數(shù)創(chuàng)建一個新的可調(diào)用對象,把原函數(shù)的某些參數(shù)固定
>>> from operator import mul
>>> from functools import partial
>>> triple = partial(mul, 3)
>>> triple(7)
21
>>> list(map(triple, range(1, 10)))
[3, 6, 9, 12, 15, 18, 21, 24, 27]
如上,我們使用mul創(chuàng)建了triple函數(shù),把第一個參數(shù)固定為3,然后返回一個可調(diào)用的對象,再傳入不同的參數(shù)
python中函數(shù)的不定長參數(shù)
例1: #定義一個含有不定長參數(shù)的函數(shù),本例第三個參數(shù)*args def sum_nums(a,b,*args): print('_'*30) print(a) print(b) print(args ...
對Python中函數(shù)參數(shù)類型及排序問題,三個方面的總結(jié)
Python中函數(shù)的參數(shù)問題有點復(fù)雜,主要是因為參數(shù)類型問題導(dǎo)致的情況比較多,下面來分析一下. 參數(shù)類型:缺省參數(shù),關(guān)鍵字參數(shù),不定長位置參數(shù),不定長關(guān)鍵字參數(shù). 其實總共可以分為 位置參數(shù)和關(guān)鍵字參 ...
python中函數(shù)的參數(shù)
函數(shù)參數(shù)(一) 思考一個問題,如下: 現(xiàn)在需要定義一個函數(shù),這個函數(shù)能夠完成2個數(shù)的加法運算,并且把結(jié)果打印出來,該怎樣設(shè)計?下面的代碼可以嗎?有什么缺陷嗎? def add2num(): a = 1 ...
Python中函數(shù)的參數(shù)傳遞與可變長參數(shù)
轉(zhuǎn)自旭東的博客原文 Python中函數(shù)的參數(shù)傳遞與可變長參數(shù) Python中傳遞參數(shù)有以下幾種類型: (1)像C++一樣的默認缺省函數(shù) (2)根據(jù)參數(shù)名傳參數(shù) (3)可變長度參數(shù) 示例如下: (1)默 ...
python 中函數(shù)的參數(shù)
一.python中的函數(shù)參數(shù)形式 python中函數(shù)一般有四種表現(xiàn)形式: 1.def function(arg1, arg2, arg3...) 這種是python中最常見的一中函數(shù)參數(shù)定義形式,函數(shù) ...
python中函數(shù)的參數(shù)解析
python中函數(shù)的各種參數(shù)梳理: 1.形參:函數(shù)定義時傳入的參數(shù) 2.實參:函數(shù)調(diào)用時傳入的參數(shù) (有形參必傳實參,形參里自身特點可不傳的,可傳可不傳) 3.缺省參數(shù):不傳為默認值,傳了會覆蓋(下面 ...
(轉(zhuǎn))python中函數(shù)參數(shù)中如果帶有默認參數(shù)list的特殊情況
在python中函數(shù)參數(shù)中如果帶有默認參數(shù)list遇到問題 先看一段代碼 1 2 3 4 5 6 7 8 9 def?f(x,l=[]): ????for?i?in?range(x): ??????? ...
python中函數(shù)參數(shù)的引用方式
值傳遞和引用傳遞時C++中的概念,在python中函數(shù)參數(shù)的傳遞是變量指向的對象的物理內(nèi)存地址!!! python不允許程序員選擇采用傳值還是傳引用.Python參數(shù)傳遞采用的肯定是“傳對象引用”的方 ...
Python中函數(shù)的參數(shù)-arguments
歸納起來,Python中函數(shù)的定義形式和調(diào)用形式主要有如下幾種形式: # 函數(shù)的定義形式 def func(name) # 匹配positional參數(shù)或者keyword參數(shù) def func(nam ...
隨機推薦
JDBC使用事務(wù)實例
package qddx.JDBC; import java.sql.*; public class useTransaction { public static void main(String[] ...
jquery 集合操作
修剪字符串 $.trim(value) 功能: 刪除傳入的字符串開頭和結(jié)尾的空白 [空白]匹配js正則中的\s,也就是包括空白,換行,回車,制表符,換頁以及Unicode字符\u00A0 返回值: 返 ...
UITabBarController的使用和坑
本人apem 說到UITabBarController, 最首要的坑就是tabbar的圖片不顯示的問題 1. tabbar上的圖片一定要2套以上, 例如一個uitabbaritem的image是 se ...
python之對指定目錄文件夾的批量重命名
python之對指定目錄文件夾的批量重命名 import os,shutil,string dir = "/Users/lee0oo0/Documents/python/test" ...
明明已經(jīng)執(zhí)行Log.i,偏偏打不出日志
Android內(nèi)打日志用的當然是Log.i(tag,string),調(diào)試時的日志輸出可以很快的反映一些問題,方便我們跟進. 但是如果連日志都打不出來了怎么辦呢,我今天就遇到了比較坑的問題.項目里別的日 ...
DB2 Unload 的時候遇到B37-04
B37-04的問題是每個Mainframer首先會遇到的問題,在Unload的時候最大的可能性是Extend次數(shù)到16次了,這時候只要加大primary或secondary就可以了,我最常用的是pri ...
【轉(zhuǎn)】Android設(shè)置虛線、圓角、漸變
Android虛線圓角漸變 有圖又真相,先上圖再說. 點擊效果: 設(shè)置虛線: <?xml ?version="1.0"?encoding="utf-8" ...
What&#39;s this?(js)
What's this? 由于運行期綁定的特性,JavaScript 中的?this?含義非常多,它可以是全局對象.當前對象或者任意對象,這完全取決于函數(shù)的調(diào)用方式 隨著函數(shù)使用場合的不同,this的 ...
Tomcat 或JBOSS java.lang.ArrayIndexOutOfBoundsException: 8192 解決方案【轉(zhuǎn)】
錯誤信息: 2017-1-17 10:09:39 org.apache.catalina.core.StandardWrapperValve invoke 嚴重: Servlet.service() ...
pyspark實現(xiàn)自動提示以及代碼高亮
pyspark實現(xiàn)自動提示以及代碼高亮 起因 打開pyspark發(fā)現(xiàn)啥提示都沒有,太不友好了啊,然后忍不住谷歌了一下,發(fā)現(xiàn)了這篇文章,內(nèi)容如下: 1.pip install ptpython; 2.e ...
總結(jié)
以上是生活随笔為你收集整理的html绑定带有形参的函数,Python中函数参数类型和参数绑定的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 概率论 参数估计与假设检验 区分及例子
- 下一篇: 【C语言】通讯录管理系统