4.4函数

面向过程编程的缺点:

​ 1.代码重复;

​ 2.代码可描述性不高;

4.4.1 函数初识

​ 函数是对代码块动作和功能的封装定义:函数是以功能为导向,一个为函数封装一个功能。

​ 优点:函数减少了代码的重复性,增强了代码的可读性;

结构: def 函数名(形参列表) : 形参列表指的是可以有多个参数

​ 函数体

​ def: 定义函数 ,关键字

​ 函数名:命名与变量命名规范一致,重要的是一定要可描述性

():传参使用

调用: 函数名()

#字符串的倒数输出
def revers_num():
s = input('请输入一串数字:')
a = s[::-1]
print(a)
revers_num()

4.4.2 函数的返回

执行函数完毕,可以使用return来返回结果。

def revers_num():#数字的倒数输出
s = input('请输入一串数字:')
a = s[::-1]
print(a)
return True
n = revers_num()
print(n) #输出为True

return的使用:

  1. 函数中遇到return, 此函数结束, 不再继续执行;
  2. 给函数的执行者一个访问结果;
  3. 如果return后面什么都不写或者没有写return,那么返回就是None;
  4. return后面有单个值,执行者可以接受到这个值(不改变值的类型);
  5. return后跟着多个值,执行者可以得到一个元组,执行者也可以直接解构成多个变量,解构后一定保证变量与元素一一对应;
#返回一个值
def new_len(li):
count = 0
for j in li :
count += 1
return count
li = [1,2,3,4,5,6,7,8]
a = new_len(li)
print(a) #输出 8 #返回多个值
def inf ():
a = 1
b = 2
c = 3
return a,b,c
a = inf()
print(a) #输出一个元组(1, 2, 3)
a,b,c = inf() #解构
print(a,b,c) #输出 1 2 3

4.4.3函数的参数

语法:def 函数名(参数):

​ 函数体

#数字的倒数输出
def revers_num(NNNN): #NNNN就是形参,
s = str(NNNN)
a = s[::-1]
print(a)
return True
revers_num(123) #123就是实参
#输出321

形参:在函数声明的位置给出来的参数叫形参,用一个变量来表示,表示这个函数需要XXXX

实参:在函数调用的时候给参数的传递值叫实参,实际执行的时候给函数传递信息,表示函数需要XXXX

传参:为了函数的扩展性。在函数传递信息时,把实参传递给形参的过程就叫做传参

def new_len(a):
count = 0
for i in a :
count += 1
return count
li = [1,2,3,4,5]
s = '12345'
print(new_len(li))
print(new_len(s))

4.4.4 实参的分类

位置参数:从左至右按顺序一一对应;位置改变,函数运行的结果会改变,灵活性不够

def inf(name,age,sloggon):
print('my name is ',name)
print('my age is ',age)
print('my sloggon is',sloggon)
inf('盖伦',23,'德玛西亚')
#输出
my name is 盖伦
my age is 23
my sloggon is 德玛西亚
#如果将实参的位置改变,输出的结果就惨不忍睹

关键字参数:一一对应;不需要记住每个参数的位置,只要记住每个参数的名字就可以了

def inf(name,age,sloggon):
print('my name is ',name)
print('my age is ',age)
print('my sloggon is',sloggon)
inf(age=23,sloggon='德玛西亚',name='盖伦') #不管你的位置怎么变,只要标记了形参,那输出的结果就是一样的
#输出
my name is 盖伦
my age is 23
my sloggon is 德玛西亚

混合参数:位置参数必须放在关键字参数前面且要按照顺序一一对应;

当关键字参数放在位置参数前边时,运行会报错;位置参数设定完毕后,关键字参数不能跟位置参数传参冲突,不然会报“多个参数”错误

#正确示范:
def inf(name,age,sloggon):
print('my name is ',name)
print('my age is ',age)
print('my sloggon is',sloggon)
inf('盖伦',23,sloggon='德玛西亚')
#错误示范
inf(name='盖伦',23,'德玛西亚')
inf(23,'德玛西亚',name='盖伦')

4.4.5 形参的分类

位置参数:与实参的位置参数相同,按顺序一一对应。

默认参数:放在位置参数之后;在函数声明的时候, 就可以给出函数参数的默认值,在调⽤的时候可以给出具体的值, 也可以不给值, 使用默认值。

def inf(name,age,team='战士'):
print('name is :',name)
print('age is:',age)
print('team is:',team)
inf('皇子',25,) #如果没有定义team,那就照着函数的默认来
inf('莫甘娜',age=1000,team='丛林法师') #重新定义了team参数

总结:

​ 1.位置参数,按照位置给形参赋值

​ 2.默认参数,传参时如果重新定义了参数值,默认值不起作用;没有重新定义时,默认参数传参。目的是保证有一个参数一直在

​ 3.顺序:位置参数必须放在前面,默认参数必须放在后面

默认参数的坑

当默认参数是可变类型时,定义的变量不会随着函数的结束而消失

def func(a,l=[]):
l.append(a)
return l
print(func(1,)) #输出 [1]
print(func(2,)) #输出 [1, 2]
print(func(3,)) #输出 [1, 2, 3]
#你说神奇不神奇,l列表竟然在函数结束后保留下来了

python学习之函数(一)的更多相关文章

  1. python学习8—函数之高阶函数与内置函数

    python学习8—函数之高阶函数与内置函数 1. 高阶函数 a. map()函数 对第二个输入的参数进行第一个输入的参数指定的操作.map()函数的返回值是一个迭代器,只可以迭代一次,迭代过后会被释 ...

  2. python学习7—函数定义、参数、递归、作用域、匿名函数以及函数式编程

    python学习7—函数定义.参数.递归.作用域.匿名函数以及函数式编程 1. 函数定义 def test(x) # discription y = 2 * x return y 返回一个值,则返回原 ...

  3. 从0开始的Python学习007函数&函数柯里化

    简介 函数是可以重用的程序段.首先这段代码有一个名字,然后你可以在你的程序的任何地方使用这个名称来调用这个程序段.这个就是函数调用,在之前的学习中我们已经使用了很多的内置函数像type().range ...

  4. python学习Day10 函数的介绍(定义、组成、使用)

    今日学习内容: 1.什么是函数 :函数就是一个含有特定功能的变量,一个解决某问题的工具 函数的定义:通过关键字def + 功能名字():代码体(根据需求撰写代码逻辑) 2.为什么要用函数:可以复用:函 ...

  5. Python学习之函数参数

    上一节,我们学习了Python中是如何定义和调用函数且如何得到返回值的.在调用函数时,有的函数需要参数来启动函数,有的则无需参数.这一节我们来介绍Python中有哪些参数类型. 位置参数 在调用函数时 ...

  6. Python学习笔记 - 函数参数

    >>> def power(x): ... return x * x ... >>> power(5) 25 >>> def power(x, n ...

  7. Python学习笔记—函数

    函数 我们知道圆的面积计算公式为: S = πr2 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需要计算3个不同大小的圆的面积: r1 = 12.34 r2 = 9.08 r3 = 73 ...

  8. Python学习之函数篇

    python查看对象,函数帮助文档:.__doc__,例:str.split.__doc__ 查看详细对象,函数文档:help(),例:help(str.split) 函数参数可设置默认值 如果不能提 ...

  9. Python学习--05函数

    Python函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.我们已经知道Python提供了许多内建函数,比如print().但我们 ...

  10. python学习:函数的学习

    我们写东东的时候,往往有一些东西要频繁去复用,那么每个功能是10行代码,复用2次就是20行,这样看来我们的程序如果频繁利用某些代码的话,那么会是我们开发的东西越来越臃肿.那么好的方法有没有呢,那就是函 ...

随机推荐

  1. redis事务(转载)

    原文地址:http://blog.csdn.net/hechurui/article/details/49508749 Redis事务 首先,Redis本身是单线程的. redis中的事务(trans ...

  2. 在JavaScript中,++在前和++在后有什么区别

    一.++可以与输出语句写在一起,++写在变量前和写在变量后不是一个意思++ i 和 i ++ 区别在于运算顺序和结合方向. 在JavaScript中有两种自加运算,其运算符均为 ++,功能为将运算符自 ...

  3. Gym - 101987G Secret Code (概率+数学积分)

    题意:有A,B,C三个人要见面,每个人在[0,S]随机选择一个时间点作为见面时间,先到的那个人要等下一个人来了之后和他确认信息,然后马上就走. 例如,假如A先到,B其次,C最后到,那么A要等B到了之后 ...

  4. Django-csrf中间件

    一.详解csrf原理 csrf要求发送post,put,或者delete请求的时候,是先以get方式发送请求,服务端响应时会分配一个随机字符串给客户端,客户端第二次发送post,put或delete请 ...

  5. sys.argv的意义及用法

    sys.argv的意义 简单来说,sys.argv是一个参数列表,这个列表存放着从外界获取到的参数(可能有多个) 下面以一个例子来详细阐述sys.argv,本次演示在ubuntu环境下运行 新建一个t ...

  6. MAC使用终端DISKUTIL命令给U盘分区(解决window优盘只有200M)

    1.先使用diskutil list命令查看U盘代号 2.然后用下面的命令把它格式化: sudo diskutil eraseDisk FAT32 USB_NAME MBRFormat /dev/di ...

  7. Huber loss<转发>

    from https://blog.csdn.net/lanchunhui/article/details/50427055请移步原文

  8. CF G. Indie Album 广义后缀自动机+树链剖分+线段树合并

    这里给出一个后缀自动机的做法. 假设每次询问 $t$ 在所有 $s$ 中的出现次数,那么这是非常简单的: 直接对 $s$ 构建后缀自动机,随便维护一下 $endpos$ 大小就可以. 然而,想求 $t ...

  9. 【PKUSC2019】线弦图【计数】【树形DP】【分治FFT】

    Description 定义线图为把无向图的边变成点,新图中点与点之间右边当且仅当它们对应的边在原图中有公共点,这样得到的图. 定义弦图为不存在一个长度大于3的纯环,纯环的定义是在环上任取两个不相邻的 ...

  10. 论文阅读:Fast, Scalable, and Programmable Packet Scheduler in Hardware

    摘要: 随着链接速度的提高和CPU扩展速度的放缓,软件中的数据包调度会导致较低的精度和较高的CPU利用率. 通过将数据包调度卸载到诸如NIC之类的硬件,可以潜在地克服这些缺点.然而为了保持软件分组调度 ...