1、*args

# 位置参数,计算x2的函数
def power(x):
return x * x p = power(5)
print(p) # 把power(x)修改为power(x, n),用来计算xn
def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
p1 = power(5, 2)
p2 = power(5, 3)
print(p1)
print(p2) # 默认参数
# 使用默认参数有什么好处?最大的好处是能降低调用函数的难度。 def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s # 关键字参数有什么用?
# 它可以扩展函数的功能。比如,在person函数里,
# 我们保证能接收到name和age这两个参数,但是,如果调用者愿意提供更多的参数,我们也能收到。
# 试想你正在做一个用户注册的功能,除了用户名和年龄是必填项外,
# 其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。 # *args是可变参数,args接收的是一个tuple
# 可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,
# 再通过*args传入:func(*(1, 2, 3)); def hello(greeting, *args):
if (len(args)==0):
print('%s!' % greeting)
else:
print('%s, %s!' % (greeting, ', '.join(args))) hello('Hi')
hello('Hi', 'Sarah')
hello('Hello', 'Michael', 'Bob', 'Adam') names = ('Bart', 'Lisa')
hello('Hello', *names)

2、**kw

# Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。

# 默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误!

# 要注意定义可变参数和关键字参数的语法:
# *args是可变参数,args接收的是一个tuple;
# **kw是关键字参数,kw接收的是一个dict。
# 以及调用函数时如何传入可变参数和关键字参数的语法:
# 可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,
# 再通过*args传入:func(*(1, 2, 3)); # 关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,
# 再通过**kw传入:func(**{'a': 1, 'b': 2})。 # 使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。 # 命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。 # 定义命名的关键字参数在没有可变参数的情况下不要忘了写分隔符*,否则定义的将是位置参数。 def print_scores(**kw):
print(' Name Socre')
print('..........')
for name, score in kw.items():
print('%10s %d' %(name, score))
print()
print_scores(Adam = 99, Lisa=88, Bart=77) data ={ 'Adam Lee': 99,
'Lisa S': 88,
'F.Bart': 77
} print_scores(**data) def print_info(name, *, gender, city='Beijing', age):
print('Personal Info')
print('-------------')
print('Name:%s' % name)
print('Gender:%s' % gender)
print('City: %s' % city)
print('age:%s' % age)
print()
print_info('Bob', gender='male', age=20)
print_info('Lisa',gender='female', city='Shanghai', age=18)

最新文章

  1. 触屏touchstart 与 click
  2. ASP.NET 缓存
  3. XCode使用自带SVN,SVN命令
  4. 搭建EJB3开发环境
  5. PLSQL_基础系列05_视图控制WITH CHECK OPTION(案例)
  6. sqlserver2008 复制,镜像,日志传输及故障转移集群区别
  7. Android开发环境搭建(图文教程)
  8. Puppet的执行过程
  9. 辛星跟您玩转vim第一节之vim的下载与三种模式
  10. Android从raw、assets、SD卡中获取资源文件内容
  11. 杨氏矩阵查找元素位置Java实现
  12. linux通用邻居基础架构
  13. CI分页器pagination的原理及实现
  14. 201521123067 《Java程序设计》第6周学习总结
  15. shell实现脚本监控服务器及web应用
  16. Electron 项目在 Mac 下复制和粘贴快捷键失效的解决办法
  17. px,em,rem的区别与用法
  18. Python标准库之textwrap模块
  19. shell脚本编写某一文件夹内拷贝某一段文件(有则跳过没有则拷贝)
  20. rabbitmq的五种工作模式

热门文章

  1. 【论文笔记】Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition
  2. [CodeForce 801A] Vicious Keyboard
  3. C#Winform工具箱简介
  4. 剥开比原看代码10:比原是如何通过/create-key接口创建密钥的
  5. C语言调用Python 混合编程
  6. mysql联合主键自增、主键最大长度小记
  7. MAC office2016 安装及激活
  8. centos7 (ifconfig不能使用) -bash: ifconfig: command not found
  9. hibernate的三种状态和缓存
  10. leecode第四十三题(字符串相乘)