位置参数,默认参数,非关键字可变长参数,关键字可变长参数

def f(name, gender = ‘male‘, *args, **kw):
    pass

位置参数:name

默认参数:gender

非关键字可变长参数:args

关键字参数:kw

tips:四者的顺序必须是(位置参数)+(默认参数)+(非关键字可变长参数)+(关键字参数)

特殊情况:

def f(name, gender = ‘male‘, *args, **kw):
        print ‘name: %s‘ % name
        print ‘gender: %s‘ % gender
        if args != ():
                #print ‘args: %d‘ % args
#               for x in args:
#                       print ‘args: %s‘ % x
                print args
        if kw != {}:
                for eachKey in kw:
                        print ‘%s:%s‘ % (eachKey, kw[eachKey])

t = tuple(range(3))
d = dict(a = 1, b = 2)
f(‘wm‘, ‘female‘, 10, x = 1,*t, **d)

运行结果:
name: wm
gender: female
(10, 0, 1, 2)
a:1
x:1
b:2

10在t之前出现,同时,t = (0, 1, 2),最后的结果是(10, 0, 1, 2)顺序与元素出现顺序一致,因为元组不可变。

因为dict无序,所以元素位置不定。

时间: 2024-10-10 15:40:45

位置参数,默认参数,非关键字可变长参数,关键字可变长参数的相关文章

参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

在Python中定义函数,可以用必选参数.默认参数.可变参数.关键字参数和命名关键字参数,这5种参数都可以组合使用.但是请注意,参数定义的顺序必须是:必选参数.默认参数.可变参数.命名关键字参数和关键字参数. Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数. 默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误! 要注意定义可变参数和关键字参数的语法: *args是可变参数,args接收的是一个tuple: **kw是关键字参数,kw接收的

(一)Python入门-5函数:06参数类型-位置参数-默认值参数-命名参数-可变参数-强制命名参数

参数的几种类型: 位置参数: 函数调用时,实参默认按位置顺序传递,需要个数和形参匹配.按位置传递的参数,称为: “位置参数” 默认值参数: 我们可以为某些参数设置默认值,这样这些参数在传递时就是可选的.称为“默认值参数”. 默认值参数放到位置参数后面. 命名参数: 我们也可以按照形参的名称传递参数,称为“命名参数”,也称“关键字参数”. 可变参数: 可变参数指的是“可变数量的参数”.分两种情况: 1. *param(一个星号),将多个参数收集到一个“元组”对象中. 2. **param(两个星号

SpringBoot参数非空校验的非最优实现历程

SpringBoot参数非空校验在网上已经有很多资料了,自己最近要实现这一个功能,大概看了下觉得没什么难度,不想在过程中还是遇到了一些问题,在此记录,希望有遇到和我一样问题的人和过路大神不吝指教. 需求是做一个全局请求参数非空校验和异常拦截,spring提供的@Validated和Hibernate提供的@Valid目前不支持请求参数为基本类型的非空判断,只能是请求参数封装为对象时,判断对象属性非空,所以要自己实现一个对基本类型的非空判断. 首先说下网上原创转载最多的一个思路:实现一个指向方法的

参数/非参数学习算法

一.参数学习算法(parametric learning algorithm) 定义:假设可以最大程度地简化学习过程,与此同时也限制可以学习到是什么,这种算法简化成一个已知的函数形式,即通过固定数目的参数来拟合数据的算法.    参数学习算法包括两个步骤: 选择一种目标函数的形式 从训练数据中学习目标函数的系数   参数学习算法的一些常见例子包括: Logistic Regression LDA(线性判别分析) 感知机 朴素贝叶斯 简单的神经网络 ?   参数机器学习算法的优点: 简单:这些算法

String... 的示例,多参数非空校验

code: /** * 多参数非空校验 * * @param params * @return */ public static boolean nullOrEmpty(String... params) { if (params != null) { for (String param : params) { if (param == null || "".equals(param.trim())) { return true; } } } return false; } test:

【Python学习】函数参数传递方法四种(位置,关键字,默认值,包裹位置,包裹关键字传递)

1. 位置传递: #--coding:utf-8-- def send(name,address): return 'package is sent to %s, located in %s' %(name, address) print(send('winnie','shanghai')) 2. 关键字传递 def run(name,length, date): return '%s ran %s on %s' %(name,length,date) #关键字传递时,可以无视参数顺序,名字对了

模块——Getopt::Long接收客户命令行参数和Smart::Comments输出获得的命令行参数内容

转载:http://www.php-oa.com/2009/04/04/perl_getopt-long.html  我们在linux常常用到一个程序需要加入参数,现在了解一下 perl 中的有关控制参数的模块 Getopt::Long ,比直接使用 @ARGV 的数组强大多了.我想大家知道在 Linux 中有的参数有二种形式. 长参数  –help 短参数   -h 也就是-和–的分别.–表示完整参数.-表示简化参数.在 Perl 的这个模块中也支持这二种方法.这要介绍的二 Getopt 其实

@有两个含义:1,在参数里,以表明该变量为伪参数 ,在本例中下文里将用@name变量代入当前代码中2,在字串中,@的意思就是后面的字串以它原本的含义显示,如果不

@有两个含义:1,在参数里,以表明该变量为伪参数 ,在本例中下文里将用@name变量代入当前代码中 2,在字串中,@的意思就是后面的字串以它原本的含义显示,如果不加@那么需要用一些转义符\来显示一些特殊字符 举例1:(2) stringsql ="update Table1 set name [email protected] where ID = '1'";//未采用SqlParameter SqlParameter sp =newSqlParameter("@name&q

Python坑系列:可变对象与不可变对象

在之前的文章 http://www.cnblogs.com/bitpeng/p/4748148.html 中,大家看到了ret.append(path) 和ret.append(path[:])的巨大差别.这和Python的对象机制有关.现在谈谈这个问题! 我们知道,Python有可变对象和不可变对象,他们的表现行为也迥然不同.先来几个简单的问题: 1 def foo1(arg): 2 arg = 5 3 print(arg) 4 5 x = 1 6 foo(x) # 输出5 7 print(x

Python入门之python可变对象与不可变对象

本文分为如下几个部分 概念 地址问题 作为函数参数 可变参数在类中使用 函数默认参数 类的实现上的差异 概念 可变对象与不可变对象的区别在于对象本身是否可变. python内置的一些类型中 可变对象:list dict set 不可变对象:tuple string int float bool 举一个例子 # 可变对象 >>> a = [1, 2, 3] >>> a[1] = 4 >>> a [1, 4, 3] # 不可变对象 >>>