python3函数的使用方法(Python3.5基础之函数的定义与使用实例详解参数、作用域、递归、重载等)
python3函数的使用方法
Python3.5基础之函数的定义与使用实例详解参数、作用域、递归、重载等本文实例讲述了python3.5函数的定义与使用。分享给大家供大家参考,具体如下:
1、函数学习框架
2、函数的定义与格式
(1)定义
(2)函数调用
注:函数名称不能以数字开头,建议函数名称的开头用小写的字母
(3)函数有四种格式,分别是:无参数无返回值,有参数无返回值、无参数有返回值、有参数有返回值
|
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:zhengzhengliu # 无参数无返回值 def hello(): # 函数体/方法体 print ( "hello world" ) hello() # 有参数无返回值 def add(x, y): print (x + y) add( 10 , 20 ) # 无参数有返回值 def sleep(): return "sleep" s = sleep() print (s) # print(sleep()) 等价于上面两句 # 有参数有返回值 def sub(x, y): return x * y res = sub( 12 , 6 ) print (res) |
运行结果
hello world
30
sleep
72
3、函数的参数
注:定义再函数体内的参数是形参,调用时传入的参数是实参。
函数参数包括:位置参数、关键字参数和不定个数参数
(1)位置参数、关键字参数
示例代码:
|
#位置参数 def test(x,y,z): print (x,y,z) test( 1 , 2 , 3 ) #关键字参数 def test1(x,y,z = 10 ): print (x,y,z) test1( 1 , 2 , 3 ) test1( 1 , 2 ) #关键字参数,z采用默认的参数值 test1(x = 2 ,z = 3 ,y = 1 ) #调用时的关键字参数 |
运行结果:
1 2 3
1 2 3
1 2 10
2 1 3
(2)默认参数
注:带有默认值参数的形参必须放在参数的最后面的位置。
(3)不定个数参数,用*args 和 **kwarg
总结:
(1)定义时 *的作用 将位置实参装配成元组
定义时 **的作用 将关键字实参装配成字典
(2)调用时 *作用 将元组或列表打散成位置参数进行参数传递
调用时 **作用 将字典打散成关键字参数进行参数传递
|
#不定个数参数 def test2(x,y,z, * args): print (x,y,z,args) #定义时 *的作用 将位置实参装配成元组 test2( 1 , 2 , 3 , 4 , 6 , 7 , 8 , 9 ) def test3(x,y,z, * * kwargs): print (x,y,z,kwargs) #定义时 **的作用 将关键字实参装配成字典 test3( 1 , 2 , 3 ,a = 6 ,b = 19 ,c = 8 ) def ts(x, * args, * * kwargs): print (x,args,kwargs) ts( 1 , 2 , 3 ,a = 6 ,b = 19 ,c = 8 ) def test4(x,y,z): print (x,y,z) x = [ 1 , 2 , 3 ] y = { "x" : 1 , "y" : "hello" , "z" : "你好" } test4( * x) #调用时 *作用 将元组或列表打散成位置参数进行参数传递 test4( * * y) #调用时 **作用 将字典打散成关键字参数进行参数传递 |
运行结果:
1 2 3 (4, 6, 7, 8, 9)
1 2 3 {'b': 19, 'a': 6, 'c': 8}
1 (2, 3) {'b': 19, 'a': 6, 'c': 8}
1 2 3
1 hello 你好
4、函数的传值:基本类型传值调用、非基本类型参数传递调用(强引用与弱引用)
|
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:zhengzhengliu #基本类型传值调用 def test(x): print (x) test( 10 ) #非基本类型参数传递调用 li = [ 1 , 2 , 3 , 4 ] print ( id (li)) #打印传递前的地址 def test1(x): print ( id (x)) x[ 0 ] = 2 #修改第一个参数为2 print (x) test1(li) #强引用(传址调用,列表里面的内容会进行修改) #test1(list(li)) #弱引用(用list可以消除强引用,不能修改列表里的元素) for i in li: print (i) |
运行结果:(强引用传址调用)
10
17741864
17741864
[2, 2, 3, 4]
2
2
3
4
|
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:zhengzhengliu #基本类型传值调用 def test(x): print (x) test( 10 ) #非基本类型参数传递调用 li = [ 1 , 2 , 3 , 4 ] print ( id (li)) #打印传递前的地址 def test1(x): print ( id (x)) x[ 0 ] = 2 #修改第一个参数为2 print (x) #test1(li) #强引用(传址调用,列表里面的内容会进行修改) test1( list (li)) #弱引用(用list可以消除强引用,传值调用,不能修改列表里的元素) for i in li: print (i) |
运行结果:(弱引用,传值调用)
10
18501544
18613272
[2, 2, 3, 4]
1
2
3
4
|
#不可变对象——传递对象的值,修改值修改的是另一个复制对象,不影响原来对象本身 def getnum(a): a = 10 print ( "函数内变量a的值:" ,a) a = 8 getnum(a) print ( "函数外变量a的值:" ,a) #可变对象——传递对象本身,函数内部修改值会影响对象本身 list01 = [ 0 , 1 , 2 , 3 ] def getnum1(num): num.append( 4 ) print (num) print ( id (num)) getnum1(list01) print (list01) print ( id (list01)) |
运行结果:
函数内变量a的值: 10
函数外变量a的值: 8
[0, 1, 2, 3, 4]
5908280
[0, 1, 2, 3, 4]
5908280
5、函数的返回值
示例代码:
|
#多个返回值 def re(a,b): a * = 10 b * = 10 return a,b num = re( 1 , 2 ) print ( type (num)) #如果返回多个值,并且存在一个变量中,会以元组的形式保存 print (num) #分别获取多个返回值 re1,re2 = re( 3 , 4 ) print ( type (re1)) print (re1,re2) |
运行结果:
<class 'tuple'>
(10, 20)
<class 'int'>
30 40
简单实例练习:
|
def operation(a,b,opt): if opt = = "+" : return a + b elif opt = = "-" : return a - b elif opt = = "*" : return a * b elif opt = = "/" : return a / b else : return "输入有误" num1 = int ( input ( "请输入第一个字符:" )) num2 = int ( input ( "请输入第二个字符:" )) op = input ( "请输入运算符:" ) result = operation(num1,num2,op) print (result) |
运行结果:
请输入第一个字符:1
请输入第二个字符:2
请输入运算符:+
3
6、变量的作用域:全局变量与局部变量
在函数的内部,不能识别全局变量,想要在函数内部使用全局变量,需要关键字global,但不建议这样使用,使用global具有污染性。
(1)局部变量
(2)全局变量
(3)当全局变量与局部变量同名时,优先使用局部变量
|
#全局变量与局部变量同名 a = 10 #全局变量 print ( "全局变量a:%d" % a) def test01(): a = 20 print ( "test01中的a:%d" % a) def test02(): print ( "test02中的a:%d" % a) test01() test02() |
运行结果:
全局变量a:10
test01中的a:20
test02中的a:10
(4)修改全局变量
|
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:zhengzhengliu i = 20 def test(): #i += 10 #函数内部直接修改全局的值(错误) global i #函数内部修改全局的值用global关键字 i + = 10 print (i) #获取全局变量的值 test() |
运行结果:
30
注:上边代码中,函数内修改不可变类
- kmp算法怎么用c描述(详解小白之KMP算法及python实现)
- python模块都是自己的语法(详解Python_shutil模块)
- python用指针合并两个有序数组(Python3实现计算两个数组的交集算法示例)
- python创建文件的方法(Python3.5文件读与写操作经典实例详解)
- python 怎么解析中文(Python中一般处理中文的几种方法)
- python异常值处理(一篇文章带你弄懂Python异常传递和自定义异常)
- python html文字分段(Python对HTML转义字符进行反转义的实现方法)
- python 制作图片文字识别(如何使用Python进行OCR识别图片中的文字)
- pythonhtml文件分析(对Python3 解析html的几种操作方式小结)
- python3.8爬虫需要的包(python爬取基于m3u8协议的ts文件并合并)
- pythonsocket教程(python3利用Socket实现通信的方法示例)
- pythonindex函数用法(python sort、sort_index方法代码实例)
- python转图片为字符图(Python实现图片转字符画的代码实例)
- python为什么使用logging(python中logging模块的一些简单用法的使用)
- python如何将运行结果存入txt中(详解python读取和输出到txt)
- python高德地图可视化(利用python和百度地图API实现数据地图标注的方法)
- 阿里最新财报公布 三季度营收增长3 ,将增加150亿美元回购额度 在美股价小涨(阿里最新财报公布)
- 赵薇时胖时瘦 最近变美少女 原因在这里 躺着就变瘦(赵薇时胖时瘦最近变美)
- 学会这26种姿势,你就可以和兵哥哥切磋了(你就可以和兵哥哥切磋了)
- 吴彦祖陈冠希 恩怨 ,失去曾让他流泪的女友,终遇走过18年真爱(吴彦祖陈冠希恩怨)
- 痴情男神 吴彦祖 与妻子恋爱8年,结婚10年,家庭幸福美满(痴情男神吴彦祖)
- 成功破圈,小牛电动SQi强势开 跨(小牛电动SQi强势开)
热门推荐
- python实现层次遍历二叉树(Python实现的序列化和反序列化二叉树算法示例)
- dedecms点赞功能怎么做呢(dedecms自定义表单添加发布时间功能的方法)
- mysql8修改默认端口(MySQL 8.0新特性 — 管理端口的使用简介)
- php制作随机编号(PHP生成随机码的思路与方法实例探索)
- python怎么抽取微信图片(Python 一键制作微信好友图片墙的方法)
- html5的表单怎么写(HTML5新增form控件和表单属性实例代码详解)
- node.js缓存区(如何利用node实现静态文件缓存详解)
- h5打开小程序点允许(html5跳转小程序wx-open-launch-weapp踩坑)
- vue验证码(vue_drf实现短信验证码)
- css3渐变放大功能(CSS3 渐变Gradients之CSS3 线性渐变)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9