当前位置: 首页 > news >正文

Python学习笔记11—函数

  定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。

Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。

 

建立第一个函数

/usr/bin/env Python
#coding:utf-8
def add_function(a,b):
    c = a+b
    print c
if __name__=="__main__":
    add_function(2,3)

在定义函数的时候,参数可以像前面那样,等待被赋值,也可以定义的时候就赋给一个默认值。例如

>>> def times(x,y=2): #y的默认值为 2
... print "x=",x
... print "y=",y
... return x*y
...
>>> times(3) #x=3,y=2
x= 3
y= 2

全局变量和局部变量

x = 2
def funcx():
global x #全局变量
x = 9
print "this x is in the funcx:-->",x funcx()
print "--------------------------" print "this x is out of funcx:-->",x

结果:

this x is in the funcx:--> 9
--------------------------
this x is out of funcx:--> 9

参数收集

函数的参数的个数,当然有不确定性,函数怎么解决这个问题呢?

#/usr/bin/env python
#encoding=utf-8
def func(x,*arg):
    print x #输出参数 x 的值
    result = x
    print arg #输出通过 *arg 方式得到的值
    for i in arg:
      result +=i
    return result

print func(1,2,3,4,5,6,7,8,9) #赋给函数的参数个数不仅仅是 2个

运行此代码后,得到如下结果:

1 #这是函数体内的第一个 print,参数x得到的值是 1
(2, 3, 4, 5, 6, 7, 8, 9) #这是函数内的第二个 print,参数 arg 得到的是一个元组
45 #最后的计算结果

*args 这种形式的参数接收多个值之外,还可以用 **kargs 的形式接收数值

>>> def foo(**kargs):
... print kargs
...
>>> foo(a=1,b=2,c=3) #注意观察这次赋值的方式和打印的结果
{'a': 1, 'c': 3, 'b': 2}

不知道参数到底会可能用什么样的方式传值呀,这好办,把上面的都综合起来。

>>> def foo(x,y,z,*args,**kargs):
... print x
... print y
... print z
... print args
... print kargs
...
>>> foo('qiwsir',2,"python")
qiwsir
2
python
()
{}
>>> foo(1,2,3,4,5)
1
2
3
(4, 5)
{}
>>> foo(1,2,3,4,5,name="qiwsir")

 

相关文章:

  • iOS - AppStores App 上架
  • 从输入 URL 到浏览器接收的过程中发生了什么事情
  • java设计模式类图大全
  • Spark Streaming 的玫瑰与刺
  • CentOS 6.4下Squid代理服务器的安装与配置
  • 0909滴滴面试小结
  • Mongodb 利用mongoshell进行数据类型转换
  • pom.xml标签以及maven在Idea使用
  • Android 样式和主题(style theme)
  • Linux作业7
  • 判断终端是ios还是安卓的一些妙用(附加微信分享图标修改)
  • 4: Accessing Environment Variables(Working with programs)
  • flat network 原理与配置 - 每天5分钟玩转 OpenStack(86)
  • 4 张 GIF 图帮助你理解二叉查找树
  • linux目录结构详细介绍
  • 3.7、@ResponseBody 和 @RestController
  • Apache的基本使用
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Java 最常见的 200+ 面试题:面试必备
  • MySQL的数据类型
  • Python_网络编程
  • Vue--数据传输
  • - 概述 - 《设计模式(极简c++版)》
  • 基于游标的分页接口实现
  • 详解移动APP与web APP的区别
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $.ajax()
  • $NOIp2018$劝退记
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (力扣题库)跳跃游戏II(c++)
  • (排序详解之 堆排序)
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转载)深入super,看Python如何解决钻石继承难题
  • **PHP二维数组遍历时同时赋值
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .net 微服务 服务保护 自动重试 Polly
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET建议使用的大小写命名原则
  • .Net转前端开发-启航篇,如何定制博客园主题
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [20180129]bash显示path环境变量.txt
  • [Android Pro] listView和GridView的item设置的高度和宽度不起作用
  • [AutoSar]BSW_OS 01 priority ceiling protocol(PCP)
  • [C++]C++类基本语法
  • [CUDA 学习笔记] CUDA kernel 的 grid_size 和 block_size 选择
  • [DevOps云实践] 彻底删除AWS云资源