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
注:上边代码中,函数内修改不可变类
- python字符串之基本操作小练习(Python数据类型之String字符串实例详解)
- python与php(解决Python3 被PHP程序调用执行返回乱码的问题)
- python类继承和封装(Python面向对象程序设计类的封装与继承用法示例)
- python微信红包代码(php生成微信红包数组的方法)
- python实现层次遍历二叉树(Python实现的序列化和反序列化二叉树算法示例)
- python3.7标准库官方手册(Python3.7 dataclass使用指南小结)
- python里range循环(Python for循环与range函数的使用详解)
- python中生成字符串序列(python实现字符串加密 生成唯一固定长度字符串)
- python条形码识别(python3转换code128条形码的方法)
- pythonlambda详解(Python的条件表达式和lambda表达式实例)
- python开启多线程(python 多线程重启方法)
- python中字符串截取规则(Python中的字符串切片截取字符串的详解)
- python比go语言简单(Python和Go语言的区别总结)
- pythontkinter详解(python3.6使用tkinter实现弹跳小球游戏)
- python自学编程笔记(Python 编程速成推荐)
- python中的变量与变量类型(Python变量类型知识点总结)
- 19号线二期全线电通 轨道交通项目最新进展来了(19号线二期全线电通)
- 涉及3条地铁线路 成都这4座轨道交通站点有新名字了(涉及3条地铁线路)
- 来了 成都轨道交通5条线路刷新 进度条(成都轨道交通5条线路刷新)
- 一部手机两套系统 OPPO Find X3的正确打开方式你知道吗(一部手机两套系统)
- OPPO用户看过来 汇总几个春节实用技巧,轻松搞定多设备联动玩法(汇总几个春节实用技巧)
- 北京旅游攻略(北京旅游攻略5日游及其花费)
热门推荐
- 云服务器怎么创建(怎样操作云服务器)
- jenkins 构建docker镜像(docker搭建jenkins+maven代码构建部署平台)
- docker-compose项目部署(使用Docker Compose部快速署ELK亲测有效)
- php里的fpm是什么(phpfpm的作用和用法)
- php怎么弄不重复字符串(PHP中将一个字符串部分字符用星号*替代隐藏的实现代码)
- mysql 用户权限配置(详解MySQL 用户权限管理)
- MySQL主从状态检查的实现(MySQL主从状态检查的实现)
- tomcat作用及原理(详解Tomcat常用的过滤器)
- python scrapy爬虫教程视频(详解python3 + Scrapy爬虫学习之创建项目)
- pythontkinter详解(python3.6使用tkinter实现弹跳小球游戏)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9