函数的定义

使用关键字def定义函数

def myfunc():print('hello word')myfunc()

使用关键字def定义函数时,要在小括号后面添加冒号:,函数定义之后,带有缩进的部分都是函数体,这个函数中,函数体就打印个字符串

函数传参

1.按位置传参

当函数的形参有多个时,最简单的方式就是按照参数的位置按顺序传参

def twoparafunc(para1, para2):print(para1, para2)twoparafunc('qwer', "asdf")
twoparafunc('asdf', 'qwer')

这个函数有两个形参,当传参的顺序不同时,输出的结果也不一样,所以,按位置传参很依赖参数的顺序。

而且在调用函数时,无法将函数的形参与实参一一对应,可读性不高

2.关键字传参

关键字传参就是在调用函数时,将函数的形参和实参关联

def twoparafunc(para1, para2):print(para1, para2)twoparafunc(para1='qwer', para2='asdf')
twoparafunc(para2='asdf', para1='qwer')

使用关键字传参将函数的形参与实参进行匹配,可读性好,而且函数形参的顺序也无关紧要(para1和para2谁在前谁在后都可)

3.默认实参

默认实参就是在函数定义的时候,将函数的形参指定为某个值

def defaultpara(para1, para2='xiaocui'):print(para1, para2)defaultpara('haha')
defaultpara(para1='haha')
defaultpara('haha', 'laocui')
defaultpara(para1='haha', para2='laocui')

在defaultpara中,将para2的值指定为'xiaocui',所以,在调用函数defaultpara时,如果不想指定第二个参数,那么就可以省略第二个实参的书写,当然,也可以重新指定实参

注意点

在函数定义的时候,将默认实参放在函数的最后,且默认参数的等号两边不要有空格

def defaultpara2(para1='haha', para2):print(para1, para2)defaultpara2('xiaocui')

此时调用defaultpara2时,会报错,提示默认参数后面有一个非默认参数,Python中规定默认参数后面不能跟非默认参数,具体原因见知乎https://www.zhihu.com/question/24981697

所以,在定义函数的时候,先把写出没有默认参数的形参,再写有默认参数的形参,这样就不会报错了

4.传列表和字典

无论上述哪种传参形式,都可以给一个函数传列表或者列表

def twoparafunc(para1, para2):print(para1, para2)twoparafunc(para2=[x for x in range(0,10)], para1={'x':5})

当使用列表名字进行传参时,在函数中修改列表,原来的列表也会随之变化,当使用切片传参时,传入的只是列表的副本,修改该副本,不影响原来列表

def twoparafunc(para1, para2):if isinstance(para1, list)://类型判断para1[0]=110else:print('para1 is not a list')if isinstance(para2, list):para2[0]=119else:print('para2 is not a list')print(para1, para2)l1=list(range(0,10));
l2=[x**2 for x in l1[0::2]]//偶数平方
print(l1,l2)
twoparafunc(para1=l1, para2=l2[:])
print('----------------------')
print(l1,l2)

l1使用列表名字进行传参,l2使用切片进行传参,l1在函数中变化时,l1永久被改变,而l2传的是列表的切片,只是一个副本,与l2无关,所以离开作用域后,l2无变化

具体原因见博客https://blog.csdn.net/Master_Cui/article/details/105332447中关于列表复制的描述,一般情况下,如果要传列表,请使用列表名进行传参,因为切片需要拷贝,创建副本,影响效率,尤其是大列表

关于类型判断的相关文章见https://blog.51cto.com/alsww/1787848

5.传递任意数量的参数

def anyparas(*paras):print(paras, type(paras))anyparas(1,2,3,4,list(range(0,20))[1:19:3], {'x':10}, tuple(range(0,5)))

在Python中,想传递任意数量的参数,可以将参数前面加一个*,这里*paras表示传递任意数量的参数

输出结果最外层使用括号括起来的,说明参数paras是一个元组,而且打印结果也证明了这一点

如果想将一般参数和任意数量的参数结合使用,任意数量的参数一定要放在最后

def anyparas2(para1, para2, *paras):print(para1, para2)print(paras)anyparas2(1,2,3,4,list(range(0,20))[1:19:3], {'x':10}, tuple(range(0,5)))

para1匹配1,para2匹配2,剩下的参数匹配paras

6.将任意数量的关键字参数存储在字典中

如果想将任意关键字参数以 参数名:参数值 的形式存储到字典中,需要在函数参数的名称前中添加**

def parasindict(lname, fname, **info):print(info)parasindict('cui','jidan', para1=10, para2=20)
parasindict(lname='cui',fname='jidan', para1=10, para2=20)

上述代码将para1和para2的名称和对应的值以字典的形式存储到info参数中

把lname和rname也以关键字的形式进行传参,不会存储到info中,就说明存储到字典中的关键字参数不能在函数定义中出现,必须得是不重复的参数

函数的返回值

和C++一样,Python也通过return关键字将值返回到函数调用处

def parasindict2(lname, fname, **info):return info;print(parasindict2('cui','jidan', para1=10, para2=20))
print(parasindict2(lname='cui',fname='jidan', para1=10, para2=20))

上述代码将字典info返回,并通过print打印

模块与函数

模块就是.py文件,如果想在一个文件中使用另一个文件中的函数,就需要使用将文件(模块)导入到正在编辑的文件中,

1.导入整个模块(文件)

现在有个文件名字叫function.py,想在module.py中使用function.py中的函数,只需要在module.py的开头添加一句import function,这样就会将整个function.py中的内容导入到文件中

比如function.py的内容如下:

def myfunc():
print('hello word')

比如在module.py中使用function.py中的函数,module.py的内容如下

import function
function.myfunc()

当使用了import function后,就可以在module中通过 文件名(模块名).函数名 的方式访问function中的函数(例如function.myfunc())

如果觉得function名字有点长,可以给function模块重命名

import function as ff.myfunc()
function.myfunc()

效果完全一样,只不过通过as函数给模块重命名一下

2.导入模块(文件)中的某些函数

如果在function.py的文件有两个函数

def myfunc():print('hello word')def myfunc2():print('hello word2')

如果现在只想导入myfunc2,可以通过from function import myfunc2来实现

from function import myfunc2myfunc2()

现在在module中只导入了myfunc2函数,而且在调用myfunc2时,不用指定模块名

如果想导入某个文件(模块)的所有函数,可以使用from function import *,不过这种方式不建议使用,因为Python的包太多,调用函数时很容易出现歧义错误

参考:

1.《Python编程从入门到实践》

2.https://www.zhihu.com/question/24981697

3.https://blog.51cto.com/alsww/1787848

欢迎大家评论交流,作者水平有限,如有错误,欢迎指出

Python知识点6——函数相关推荐

  1. Python知识点7——类

    定义一个类 Python中,定义类的方式是:class classname(): class cat():def __init__(self, name, age):#Python中的构造函数,初始化 ...

  2. Python知识点笔记-条件选择、循环和函数

    Python知识点范围:条件选择.循环和函数 条件选择和循环 python的缩进是4个空格,之所以我们的Tab可以,因为友好的编辑器自动为我们转化了,如果是制表符的话会报错的: 函数定义.条件判断.循 ...

  3. python中pivot函数用法_python中pivot()函数基础知识点

    不同于以往为大家介绍的函数使用,我们利用pivot函数可以实现的方式,就是用来重塑数据使用的,在python的使用上并不常见,但是如果需要利用这种功能,基本上能够被我们选择调用的函数,pivot函数一 ...

  4. 【Python知识点梳理】5.Python内置函数

    5.Python内置函数 文章目录 1.内置函数简介 2.数据运算 3.类型转换 4.序列操作 5.Set集合 7.其他内置函数 6.综合练习 总结 1.内置函数简介   任何一门编程语言的核心操作都 ...

  5. 刻意练习:Python基础 -- Task05. 函数与Lambda表达式

    背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...

  6. 前辈说先学会了这些Python知识点,再谈学习人工智能、机器学习

    随着前面阿法尔go打败了围棋大师,让人工智能.机器学习大火了一把,然后学习人工智能和机器学习前提也需要掌握一定的Python知识点,那么学习这些前,我们究竟应该先掌握哪些Python知识点呢? 第一阶 ...

  7. 计算机二级python基础知识总结-计算机二级python 知识点篇(程序的控制结构)...

    计算机二级python 知识点篇(程序的控制结构) 程序的基本结构 程序由三种基本结构组成: 顺序结构. 分支结构和循环结构 分支结构 单分支结构 if and 表示多个条件"与" ...

  8. python必背内容-python必背函数

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 今天给大家分享一些学习python必须认识的英文单词,同时也是学习编程都 ...

  9. Python知识点笔记-面向对象进阶篇

    python知识点范围:magic method魔术方法 magic method魔术方法是前后有两个下划线的属性: 创建对象的方法def __new__(cls ),重写的话可能需要一个星号和两个星 ...

最新文章

  1. RAISE_APPLICATION_ERROR用法
  2. Webpack 源码学习系列(一)
  3. Fuchsia中GN与Ninja构建demo
  4. qt 二维数组初始化_C++数组初始化方法
  5. 帮助用户连接网络打印机工具
  6. Discovery and auto register
  7. html玫瑰花ui,玫瑰花小制作分享-JavaScript(七夕专属浪漫)
  8. js根据生日计算出年龄
  9. 高德地图-----国家和省级地图切换
  10. negroni-gzip源代码分析
  11. 架构之美【kubernetes、Prometheus、微服务、LVS负载均衡】
  12. 忘记,只需一朵花开的时间。
  13. 深度学习入门笔记(一):深度学习引言
  14. 用安卓手机控制 HomeKit 智能设备?绿米Aqara设备接入智汀家庭云保姆级教程
  15. rx580显卡运行不了Linux,RX580吃鸡不流畅原因找到了 真相令人无语
  16. mysql 读取clob数据类型_谈谈有关各数据库Blob、Clob类型字段的读取、保存更新
  17. 「深度」比天气还热的无人超市,是真有料还是在玩模式?
  18. 谷歌dns服务器未响应,“DNS服务器未响应”怎么办? - 爱绿豆
  19. 打开UG10 C语言错误,UG打开prt文件UTF8归档报错:部件已以UTF8模式归档,但NX运行
  20. python怎么清除代码_python的shell中的代码怎么清理?

热门文章

  1. 【Ethereum】以太坊ERC20 Token标准完整说明
  2. 装好Centos7后提示Initial setup of CentOS Linux 7 (core)
  3. php-fpm进程关闭与重启脚本详解(转)
  4. flume学习(四):Flume Interceptors的使用
  5. virtualbox在装centos5.6时自协把virtualbox add-on 装上了
  6. IIS出现server application error,请问怎么解决?
  7. 基于SSM实现的民宿网站系统
  8. 基于ssm框架的大学生社团管理系统
  9. 学生为什么要在CSDN写博客?
  10. VS2017中C++无法将参数1从const char [8] 转换为char[]