Python14 函数

函数

面向对象编程: 类----class

面向过程编程:过程---def

函数式编程:函数---def

def test(x):'''描述'''x +=1return x#def是定义函数的关键字#test是函数名称#(x)是参数#x+=1是 函数体,是一段逻辑代码#return 定义返回值,返回给test函数 ,并结束函数    

1.

def func1():'''test'''print ('in the func1')return 0#函数式编程def func2():'''test2'''print ('in the func2')#定义面向过程的函数,没有return;  过程就是没有返回值的函数
x = func1()
y = func2()print ('from func1 return is %s' %x)
print ('from func2 return is %s' %y)

image_1c0ai6ka017t3ukvlhs1nfh18dk9.png-3.9kB
虽然过程函数没有return,但是python会隐式的给返回一个None,所以两者差别并不大

2.

def logger():with open('test.txt','a') as f:f.write('end action\n')def test1():print('in the test1')logger()def test2():print('in the test2')logger()def test3():print('in the test3')logger()test1()        #执行函数
test2()
test3()#可以看到三个函数都调用了logger这个函数,否则的话,我们需要在每三个函数中都要写#with open这些代码; 调用了logger函数的话,就免去写重复的代码了。

我们要在三个函数每次写入的时候都加入时间戳

import timedef logger():time_format = '%Y-%m-%d  %X'    #定义格式为年、月、日、小时分钟秒time_current = time.strftime(time_format)   #显示时间,以time_format定义的格式来显示with open('test.txt','a') as f:f.write('%s end action\n' %time_current)#修改logger函数,这样test的三个函数就全都被修改了。#时间格式%后面的字母根据大小写的不同,显示的格式也不同。

image_1c0ai9j5n1rqapjrcot58hi0m.png-11.7kB
执行后看到文档内容

定义函数的好处:
代码重用
保持一致性(修改代码不会因为认为的原因导致相同的代码写错后不一致)
可扩展性

3.

image_1c0aic33g197k1jihg4t1qhoj2413.png-8.7kB
image_1c0aic8ml1s5obmk17u0cb2c0e1g.png-0.9kB
return除了会返回值给函数,还终止函数的运行,所以后面的print没有打印。

s = test()
print (s)

image_1c0aictks1mik8ou11nk17f17ei1t.png-1.3kB
return 将0返回给了test函数,赋值变量后,这个变量就等于这个return的值。
return几乎可以返回任何类型

为什么要用return,return的作用是什么: 在编程使用函数时,可能代码会很多,然后根据不同的结return不同的值,根据不同的值可以用作下面代码的判断,然后做不同的动作; 比如根据True或False,下面的代码执行不同的操作。

image_1c0aidg4k1nufe0g1d3i2mmncp2a.png-23kB
定义三个函数,一个没有return,一个return单个元素数字,一个return多个元素
image_1c0aidpm8m501m451hfki6nj6n2n.png-4.4kB
没有return默认返回None
return单个元素,会正常返回定义的值
return多个元素,会通过元组返回(相当于一个打包,然后一起返回)

4.

image_1c0aiesfn14lmhm3a4lgbu18qd34.png-4.8kB
定义带参数的函数
image_1c0aif63u197j1c1c1q281tek7rd3h.png-12.1kB
调用函数时,如果不赋值给参数就会报错

image_1c0aigj591cnb11ma17jj1b3v1195e.png-5.1kB
赋值给参数,位置要对应.
image_1c0aigter1rdf10os11eqgtud3n5r.png-0.5kB
1赋值给了x
2赋值给了y
x与y叫做形参:需要引用、被赋值的参数
1与2叫做实参:实际的参数
1与2是真是存在的,会在内存中占用空间;x与y是形式上的参数,如果x与y没有引用任何值,则不会占用内存空间。

image_1c0aihlnd1n9jh8t1nagkeh12lg68.png-5.6kB
默认的情况下,赋值参数需要位置一 一对应,否则的话就需要指定参数的赋值
image_1c0aihvff4a02911tnc1qin1du6l.png-0.5kB

image_1c0aii5ao1a2me75flm1heq1tqp72.png-6.4kB
位置参数和关键词参数是可以混写的,默认参数需要位置对应,1赋值给了x,2赋值给了y
image_1c0aiifeo1vvhl2o151p190vrk67f.png-0.8kB

image_1c0aiikj7c9ultn3ks1pa150g7s.png-6.5kB

image_1c0aiipvm1n2ddce4svfbrm5e89.png-9.5kB
这样赋值是会报错的,第一个赋值是y=1(使用的是关键词参数赋值),第二个我们使用的是位置参数赋值,但是第二个参数根据位置应该对应的是y,课时y在前面已经被占用了,所以会报错。

image_1c0aijpat1kjk1bis14ur1o3v17tc8m.png-6.8kB

image_1c0aik4no1mtj1ioj1c4rv3ov1693.png-9.5kB
可以看到关键参数在位置后面写就没有报错;

5.

image_1c0aikt5u1v8mjuv14bj1r3pke9g.png-5.3kB
在创建函数时,可以给参数赋值默认的值
image_1c0ail5b21hn61m2l1btc1frb1u5s9t.png-0.5kB
在给参数赋值时,如果不从新赋值,那么参数就会使用创建函数时给赋予的默认值

image_1c0ailni812v9dkk4gm1m3n1m48aa.png-7.9kB
可以通过位置和关键词来修改默认参数值
image_1c0aim29kg52qor1fufq6n2p7an.png-1kB
把参数从新赋值就不会使用默认参数值了,会使用新的赋值来覆盖默认的参数值

默认参数的用途:比如安装软件的默认路径,或者一些默认勾选的选项; 比如设置某个程序的默认端口等等。

6.参数组

当定义一个函数的参数时,实参不能少于或多于形参,否则执行就会报错; 有多少个实参,定义函数时就得定义多少个形参,但是如果参数需要一万个,则不可能去写一万个参数。

所以这里我们可以使用参数组;当需要的参数数量过多或者实参所需求的数量不明确时,就可以使用参数组;

image_1c0ain8d9epu1l8m18u05ov15ivb4.png-5.8kB
定义参数组的关键符号是‘*’,后面定义一个组名即可
image_1c0ainhqv1opp16b7km5166po3gbh.png-1.3kB

可以看到定义多少个参数都可以,打印时以元组形式打印出来。

‘*’ 用来接收N个位置参数,转换成元组;不能接收关键字参数。。

image_1c0aioei0f991b8p13fv1r9gu0ubu.png-7kB
image_1c0aipn45q7l1517rt2r2toopdr.png-1.4kB
传参数值的时候,也可以使用,比如([1,2,3,4,5]),只不过打印出来的时候会转换成元组

image_1c0aiq2ni4cnoioll66gk9ne8.png-8.1kB
image_1c0aiq96j1chb12a6k8o13gj16n7el.png-2.1kB
使用两个*,表示可以传入字典参数; 把N个关键字参数,转换成字典的方式。
’用来接收N个关键字参数,转换成字典。

test(**{'name':'zhangsan','age':20})

image_1c0aire835bj1nv71asm1v0c2maf2.png-2.1kB
传入参数也可以使用两个**,只不过字典的写法稍有差别

image_1c0airveuen71m991n1vnpu79sff.png-11.4kB
image_1c0ais514npm1pni1i4q1l121s1pfs.png-3kB
打印字典key对应的value

def test3(name,**kwargs):print (name)print (kwargs)test3(123)

image_1c0aisrlg1rd4lnorvh5rr1lt6g9.png-0.8kB
位置参数和参数组一起使用;
这里没有定义参数组的值,所以打印出来为空的字典

def test3(name,**kwargs):
print (name)
print (kwargs)test3('lisi',age=20,sex='M')

image_1c0aitmaprhv1c8acoe1t5o1is8gm.png-2.3kB
位置参数和参数组的值,被分开打印了

def test4 (name,age=18,**kwargs):            #在写普通参数和参数组时,要把参数组写在后面print (name)print (age)print (kwargs)test4('lisi',sex='M',hobby='car')

image_1c0aiu6plh6d77l10hjciemu4h3.png-3.1kB
使用两个位置参数和一个参数组;第二个位置参数被打印的是默认值

test4('lisi',sex='M',hobby='car',age=20)

image_1c0aiutch1mnn1skatfnv6r1rnrhg.png-3.1kB
age位置参数不使用默认值,根据关键字参数的方式对其修改

test4('lisi',22,sex='M',hobby='car')

image_1c0aivenv154v15db106aj7ldhht.png-3kB
age根据位置参数的方式对其修改


image_1c0aj03jn1taim9c1736c2s6kfia.png-16kB

image_1c0aj0aqn7bq3d713uu1295crqin.png-4.3kB
*args 接收N个位置参数;**kwargs接收N个关键字参数; 在赋值个参数时,后面并没有符合位置参数的值,所以打印位置参数会显示一个空的元组。

test5 ('lisi',33,44,55,66,sex='M',hobby='car')

image_1c0aj0ti81fa74vl1hao9trql5j4.png-4.7kB
这样4种参数就都可以体现出来了

image_1c0aj19ou13c01ti31414kd6187rjh.png-24.3kB
函数嵌套函数;
image_1c0aj23d6ni21ek91v9p1nhssf0ke.png-5.5kB

image_1c0aj30ra1oenk3h1d5g1me01253lo.png-25.2kB

image_1c0aj2s191mh88qgi351gos1m30lb.png-28.6kB
可以看到此处的代码与上面的一样,只是logger这个函数在调用函数的下面,执行时就会报错,所以在调用函数时,一定要在相关函数的下面去掉用,否则是找不到相关内容的。

转载于:https://blog.51cto.com/daimalaobing/2046665

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392083.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pandas之数值计算与统计

数值计算与统计 对于DataFrame来说,求和、最大、最小、平均等统计方法,默认是按列进行统计,即axis 0,如果添加参数axis 1则会按照行进行统计。 如果存在空值,在统计时默认会忽略空值,如果添加参数skipna …

python自动化数据报告_如何:使用Python将实时数据自动化到您的网站

python自动化数据报告This tutorial will be helpful for people who have a website that hosts live data on a cloud service but are unsure how to completely automate the updating of the live data so the website becomes hassle free. For example: I host a websit…

android intent参数是上次的结果,【Android】7.0 Intent向下一个活动传递数据、返回数据给上一个活动...

1.0 可以利用Intent吧数据传递给上一个活动,新建一个叫“hellotest01”的项目。新建活动FirstActivity,勾选“Generate Layout File”和“Launcher Activity”。image修改AndroidMainifest.xml中的内容:android:name".FirstActivity&quo…

学习深度学习需要哪些知识_您想了解的有关深度学习的所有知识

学习深度学习需要哪些知识有关深层学习的FAU讲义 (FAU LECTURE NOTES ON DEEP LEARNING) Corona was a huge challenge for many of us and affected our lives in a variety of ways. I have been teaching a class on Deep Learning at Friedrich-Alexander-University Erlan…

html5--3.16 button元素

html5--3.16 button元素 学习要点 掌握button元素的使用button元素 用来建立一个按钮从功能上来说,与input元素建立的按钮相同button元素是双标签,其内部可以配置图片与文字,进行更复杂的样式设计不仅可以在表单中使用,还可以在其…

如何注册鸿蒙id,鸿蒙系统真机调试证书 和 设备ID获取

鸿蒙系统真机调试创建项目创建项目创建应用创建鸿蒙应用(注意,测试阶段需要发邮件申请即可)关联应用项目进入关联 添加引用准备调试使用的 p12 和证书请求 csr使用以下命令// 别名"test"可以修改,但必须前后一致,密码请自行修改key…

读zepto核心源码学习JS笔记(3)--zepto.init()

上篇已经讲解了zepto.init()的几种情况,这篇就继续记录这几种情况下的具体分析. 1. 首先是第一种情况,selector为空 既然是反向分析,那我们先看看这句话的代码; if (!selector) return zepto.Z() 这里的返回值为zepto.Z();那我们继续往上找zepto.Z()函数 zepto.Z function(dom…

置信区间估计 预测区间估计_估计,预测和预测

置信区间估计 预测区间估计Estimation implies finding the optimal parameter using historical data whereas prediction uses the data to compute the random value of the unseen data.估计意味着使用历史数据找到最佳参数,而预测则使用该数据来计算未见数据的…

鸿蒙系统还会推出吗,华为明年所有自研设备都升级鸿蒙系统,还会推出基于鸿蒙系统的新机...

不负期许,华为鸿蒙OS手机版如期而至。今日(12月15日),鸿蒙OS 2.0手机开发者Beta版本正式上线,支持运行安卓应用,P40、Mate 30系列可申请公测。国内媒体报道称,华为消费者业务软件部副总裁杨海松表示,按照目…

C#中将DLL文件打包到EXE文件

1:在工程目录增加dll目录,然后将dll文件复制到此目录,例如: 2:增加引用,定位到工程的dll目录,选中要增加的dll文件 3:修改dll文件夹下面的dll文件属性 选中嵌入式资源,不…

Oracle VM Virtual Box的安装

安装Oracle VM Virtual Box安装扩展插件 选择"管理""全局设定" 在设置对话框中,选择"扩展" 选择"添加包" 找到"Oracle_VM_VirtualBox_Extension_Pack-4.1.18-78361",点击"打开" 5&#x…

python 移动平均线_Python中的SMA(短期移动平均线)

python 移动平均线With the evolution of technology rapidly evolving, so do strategies in the stock market. In this post, I’ll go over how I created a SMA(Short Moving Average) strategy.随着技术的飞速发展,股票市场的策略也在不断发展。 在本文中&…

angular中的href=unsafe:我该怎么摆脱你的溺爱!!

解决方法:angular.module加入下面这行:(依据Angular changes urls to “unsafe:” in extension page) .config(function($compileProvider){//注:有些版本的angularjs为$compileProvider.urlSanitizationWhitelist(/^\s*(https?…

android view gesturedetector,如何在Android中利用 GestureDetector进行手势检测

如何在Android中利用 GestureDetector进行手势检测发布时间:2020-11-26 16:15:21来源:亿速云阅读:92作者:Leah今天就跟大家聊聊有关如何在Android中利用 GestureDetector进行手势检测,可能很多人都不太了解&#xff0c…

Java系列笔记(4) - JVM监控与调优【转】

Java系列笔记(4) - JVM监控与调优【转】 目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例 光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之。通过学习,我觉得JVM监控与调…

地图 c-suite_C-Suite的模型

地图 c-suiteWe’ve all seen a great picture capture an audience of stakeholders.我们所有人都看到了吸引利益相关者听众的美好画面。 Let’s just all notice that the lady in the front right is not captivated by the image on the board (Photo by Christina wocin…

动态链接库.so和静态链接库.a的区别

静态链接库: •扩展名:.a  •编译行为:在编译的时候,将函数库直接整合到执行程序中(所以利用静态库编译生成的文档会更大) •独立执行的状态:编译成功的可执行文件可以独立运行,不…

华为鸿蒙系统封闭,谷歌正式“除名”华为!“亲儿子”荣耀表示:暂不考虑,鸿蒙OS处境尴尬...

我们都知道,目前智能手机最常用操作系统就是IOS和安卓,占据手机系统超过99%的市场份额。由于IOS系统的封闭性,国内手机厂商基本上都是使用谷歌的开源安卓系统。当然华为也不例外,一直使用的都是安卓系统。可以说,安卓系…

使用vue-cli脚手架搭建简单项目框架

1.首先已经安装了node,最好版本6以上。 2.安装淘宝镜像 大家都知道国内直接使用 npm 的官方镜像是非常慢的,这里推荐使用淘宝 NPM 镜像。这样就可以直接使用cnpm了。 npm install -g cnpm --registryhttps://registry.npm.taobao.org如果过程出差,是否安…

sap中泰国有预扣税设置吗_泰国餐厅密度细分:带有K-means聚类的python

sap中泰国有预扣税设置吗Hi! I am Tung, and this is my first stories for my weekend project. What inspired this project is that I have studied to become data scientist for almost two years now mostly from Youtube, coding sites and of course, Medium ,but my l…