博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python之路【第十二篇】:函数
阅读量:6867 次
发布时间:2019-06-26

本文共 1853 字,大约阅读时间需要 6 分钟。

定义函数

def 函数名(形式参数):

函数体
return 返回值

a = 1def f(b):    print(b)    return None

如上所示,就是简单的定义了一个函数

函数的返回值

  return后面为函数的返回值,跟其他编程语言不一样的是,在python中,不需要在def前面指定函数返回值的类型

如果函数没有返回值,默认返回一个None

在函数里面,只要执行了return,函数就执行完了,函数中return后面的代码就不执行了

函数的参数

  • 形参和实参
  • 指定参数
  • 默认参数
  • 动态参数
  • 函数作为参数

形参和实参

在定义函数的时候,函数名后面括号里的参数是形式参数,简称形参

在执行函数的时候,函数名后面括号里的参数是实际参数

a = 1def f(b):    print(b)f(a)

如上所示,b为形参,a为实参

指定参数

形参与实参默认是按照顺序一一对应的,如def f(x,y)......f(1,2),x与1对应,y与2对应,但是也可以指定参数,这样,形参与实参就不用一一对应了

def f(x,y)......f(y=1,x=2),这样就是指定参数

默认参数

def drive(p,name = 'alex'):    temp = name + str(p) + '开车去东北'    return temps = drive(11)print(s)

输出结果为:

alex11开车去东北

在上面的例子中,p是一个普通参数,name具有默认参数,一定要把含有默认值的参数放在后面

也可以给含有默认值的参数传递参数,这时默认值就不起作用了

动态参数

第一种动态参数:在形参列表中,在形参前面加上一个*,这样参数就可以不受数量限制了,如:

def f(*a):    print(a)    print(type(a))f(1,2,3,4,5)

输出结果为:

(1, 2, 3, 4, 5)

<type 'tuple'>

由此可见,虽然只有一个形参a,但是却接受了5个参数,还有一点需要注意,第一种动态参数的类型是元组类型

第二种动态参数:在形参列表中,在形参的前面加上两个*, 在传递参数的时候,必须是键值对传(key=value),第二种动态参数会将闯进来的参数转换成字典,如:

def f(**a):    print(a)f(k1=1,k2=2)

  输出结果为:

  {'k2': 2, 'k1': 1}

  一般,第一种动态参数用args表示,第二种动态参数用kwargs表示,因此因该是这样:f(*args)与f(**kwargs)

  两种动态参数可以放在一起使用

def fun(*args,**kwargs)...注意:*args在前面,**kwargs在后面,这个是规定死了的,不能变

fun(11,22,33,44,key1=value1,key2=value2)
这样自动就把11,22,33,44方到args中,key1=value1,key2=value2放放到kwargs中,
def fun(p,*args,**kwargs)...
fun(11,22,33,44,key1=value1,key2=value2)
这样,把11自动给p,22,33,44给args,key1=value1,key2=value2放放到kwargs中

函数作为参数 

def f1():     return 123 print(f1)

  输出结果为:<function f1 at 0x000001ABF30ED268>,由此,我们可以看出:

  f1:代指函数

  f1():调用函数

def f1():    return 123def f2(f1):    f1()    return 456

在f2函数中,参数为f1,这个时候,f1做了f2的参数

全局变量与局部变量

  约定:全局变量都大写,局部变量都小写

在函数内部,如果想要修改全局变量需要加一条global A语句

A = 1def fun():    b = 2    global A    A = 3fun()print(A)

  A为全局变量,b为局部变量,如果想要修改A,需要加一条global A语句,如果不加该语句,b=1 A=3直接这样,表示又申请了一个局部变量A

 

转载于:https://www.cnblogs.com/ronghe/p/8358591.html

你可能感兴趣的文章
BA 的岗位要求3
查看>>
基于Hyper-V3.0搭建XenDesktop7之九 部署虚拟应用之模板准备
查看>>
JS如何捆绑TypeScript声明文件
查看>>
samba服务配置
查看>>
我的友情链接
查看>>
MyBatis之ResultMap标签
查看>>
[转]WinXP、Win7脚本自动加域及用户资料迁移
查看>>
使用链路聚合进行负载分担
查看>>
NumPy之array
查看>>
ado 设置过滤
查看>>
微软私有云POC部署文档
查看>>
云计算
查看>>
mysql中的主从复制slave-skip-errors参数使用方法
查看>>
永久关闭wps热点新闻的办法
查看>>
飞信机器人安装
查看>>
修改一个字段中的部分内容
查看>>
kubernetes-1.11.0集群部署之master集群 (二)
查看>>
POJ_2001_Shortest Prefixes
查看>>
Webpack 的 HtmlWebpackPlugin 如何控制某个 chunks 的 inject 位置?
查看>>
Silverlight C# 游戏开发:未写代码先设计
查看>>