day11 函数

一、函数基础

"""
1 什么是函数
函数是盛放代码的容器:把实现某一功能的代码放到一个函数内就制造一个工具
2 为何要用函数
没有用函数之前程序的问题:
1、代码冗余、程序的可读性差 2、可拓展性差
3 如何用函数
函数-》实现某一功能的工具
函数定义-》事先准备工具的过程
函数调用-》遇到应用场景,拿来就用
函数的使用原则:先定义、后调用
"""
一 定义函数
语法
def 函数名(参数1,参数2,参数3,...):
"""函数注释"""
代码1
代码2
代码3
return 返回值 定义函数发生的事情:
(1)申请内存空间,把函数体代码存起来
(2)将函数的内存地址绑定函数名
def register():
inp_user = input("请输入您的账号:").strip()
inp_pwd = input("请输入您的密码:").strip()
inp_money = input("请充值:").strip() with open('db.txt', mode='at', encoding='utf-8') as f:
f.write('%s:%s:%s\n' % (inp_user, inp_pwd, inp_money)) x = 10
print(x)
print(register) 二 调用:
(1) 根据函数名函数的内存地址
(2) 函数的内存地址()触发函数体代码的运行
register()
register()
register()
三 函数定义阶段:只检测语法不执行代码
def func():
print('hello1')
# print('hello2'
x
print('hello3')
func()
四 函数调用阶段:才会执行函数体代码
def foo():
print('from foo')
bar()
def bar():
print('from bar')
foo()

二、函数的定义与调用

函数定义三种形式
1、有参函数
def foo(x,y):
print(x,y)
foo(1,2)
2、无参函数
def foo():
print('hello')
foo()
3、空函数
def foo():
pass
# 储备知识:函数返回值
def max2(x,y):
if x > y:
return x
else:
return y
res = max2(10,20)
print(res * 12) # 注意:函数体内可以有多个return,但是只要执行一次整个函数就会立即终止并且将其后之当做本次的结果返回
def foo():
print('hello1')
return 111
print('hello2')
return 2222
print('hello3')
return 3333 res = foo()
print(res)
# return有三种形式
1、return 值:返回一个值
2、return 值1,值2,值3:返回一个元组
3、没有return、return、return None:默认返回None
def foo():
# return 1,"aa",[1,2,3]
pass res = foo()
print(res)
# 函数调用的三种形式
def foo(x,y):
return x + y # 语句形式
foo(1,2) # 表达式
res = foo(1,2)
res = foo(1,2) * 10
print(res) # 函数的调用可以当做一个参数传给另外一个函数
res = foo(foo(1,2),3)
print(res)

三、函数参数

函数的参数分为两大类
1、形参: 在函数定义阶段括号内指定的参数(变量名),称之为形式参数,简称形参
2、实参: 在函数调用阶段括号内指定的参数(变量值),称之为实际参数,简称实参 一、位置形参:在函数定义阶段,按照从左到右的顺序依次定义的“变量名”
特点:必须被赋值,多一个不行少一个也不行
def foo(x,y):
print(x,y)
foo(1,2) 二、默认形参:在函数定义阶段,就已经为某个形参赋值了,该形参称之为默认形参
特点:调用阶段可以不用为其赋值
def foo(x,y=100):
print(x,y)
foo(111) # 不用传第二个值,因为默认有值 三、位置实参:在函数调用阶段,按照从左到右的顺序依次传入的“变量值”
特点:按照顺序传值
def foo(x,y):
print(x,y) foo(1,2)
foo(2,1) 四 关键字实参:在函数调用阶段,按照key=value的形式赋值
特点:可以打乱顺序,但是仍然能够为指定的形参赋值
def foo(x,y):
print(x,y) foo(y=2,x=1)
注意:
可以混用位置实参与关键字实参,但是
1、关键字实参必须在后
2、不能给同一个形参重复赋值
def foo(x,y):
print(x,y) foo(1,y=2)
foo(y=2,1)
foo(1,2,y=3)
五:*args与**kwargs用在形参中:汇总行为
1.*用在形参中: *会将溢出的位置实参存成元组然后赋值给紧跟其后的形参名
例子1:
def foo(x,*y):
print(x)
print(y) foo(1,2,3,4,5,6,7)
foo(1)
2.**用在形参中:**会将溢出的关键字实参存成字典然后赋值给紧跟其后的形参名 def foo(x,**y): # y = {'y': 2, 'z': 3, 'a': 111, 'b': 222}
print(x)
print(y)
foo(1,y=2,z=3,a=111,b=222)
六:*与**用在实参中:打撒
1.*用在实参中: *会将紧跟其后值打撒成位置实参
def foo(x,y,z):
print(x,y,z) foo(*[111,222,333]) # foo(111,222,333)
foo(*"hello") # foo('h','e','l','l','o')
2.**用在实参中: **后只能跟字典,**会将紧跟其后字典打撒成关键实参
def foo(x,y,z):
print(x,y,z) foo(**{'x':111,'y':222,'z':333}) # foo(x=111,z=333,y=222)

day11 函数的更多相关文章

  1. day11——函数名的使用、f格式化、迭代器、递归

    day11 函数名的第一类对象及使用 1.可以当作值被赋值给变量 def func(): print(1) print(func) a = func a() 2.当作元素存放在容器中 def func ...

  2. python全栈学习--day11(函数高级应用)

    一,函数名是什么? 函数名是函数的名字,本质:变量,特殊的变量. 函数名()执行此函数 ''' 在函数的执行(调用)时:打散. *可迭代对象(str,tuple,list,dict(key))每一个元 ...

  3. day11 函数的参数列表

    """ 今日内容: 1.函数参数的分类 2.形参是对实参的值拷贝 3.实参的分类 4.形参的分类 5.打散机制 附1:字符串的比较 """ ...

  4. day11函数(形参实参)

    形参与实参 def fn(形参们): pass # 形参:定义函数,在括号内声明的变量名,用来结束外界传来的值# 实参:调用函数,在括号内传入的实际值,值可以为常量.变量.表达式或三者的组合 # 注: ...

  5. Python——day11 函数(对象、名称空间、作用域、嵌套、闭包)

    一.函数对象  函数名就是存放了函数的内存地址,存放了内存地址的变量都是对象,即 函数名 就是 函数对象  函数对象的应用 1. 可以直接被引用  fn = cp_fn 2 .可以当作函数参数传递 c ...

  6. python学习day11 函数Ⅲ (内置函数与lambda表达式)

    函数Ⅲ(内置函数&lambda表达式) 1.函数小高级 函数可以当做变量来使用: def func(): print(123) func_list = [func, func, func] # ...

  7. day11函数的参数,函数对象 - 函数名,函数的嵌套调用

    复习 # 什么是函数:具体特定功能的代码块 - 特定功能代码块作为一个整体,并给该整体命名,就是函数 # 函数的优点: # 1.减少代码的冗余 # 2.结构清晰,可读性强 # 3.具有复用性,开发效率 ...

  8. day-11函数的形参与实参

    形参与实参 参数介绍: 函数为什么要有参数:因为内部的函数体需要外部的数据 怎么定义函数的参数:在定义函数阶段,函数名后面()中来定义函数的参数 怎么使用函数的参数:在函数体中用定义的参数名直接使用 ...

  9. python学习Day11 函数的参数列表

    复习 什么是函数? 具体特定功能的代码块 - 特定功能代码作为一个整体,并给该整体命名,就是函数 函数的优点 : 1.减少代码的冗余,2.结构清晰,可读性强 3.具有复用性,开发效率高,维护成本高 如 ...

随机推荐

  1. linux 内核源代码情景分析——越界访问

    页式存储管理机制通过页面目录和页面表将每个线性地址转换成物理地址,当遇到下面几种情况就会使CPU产生一次缺页中断,从而执行预定的页面异常处理程序: ① 相应的页面目录或页表项为空,也就是该线性地址与物 ...

  2. clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

    修改文件 /etc/sysconfig/nfs将#MOUNTD_PORT=892开启防火墙端口:firewalld-cmd --add-port=892/tcp

  3. 对于multitaper多窗口谱估计的理解及步骤 (对应matlab中pmtm函数)谱减法相关

    对于多窗口谱估计的理解 目录 对于多窗口谱估计的理解 0. 缘起 1. PMTM 含义 2. 与我们常用的周期谱估计的区别 3. 计算过程 5. 多窗/单窗谱估计结果对比 6. 程序如何生成多窗 - ...

  4. virtualbox + vagrant 安装centos7 以及 vagrant up下载太慢的解决方案

    下载安装 virtualbox下载 vagrant下载 下载启动镜像vagrant up有下载过慢的问题,可以到网页vagrant镜像仓库,找到自己需要的镜像,选择virtualbox版本下载 下载好 ...

  5. [Vue warn]: Unknown custom element: <sapn> - did you register the component correctly? For recursive components, make sure to provide the "name" option. found in ---> <Evaluate> at src/views/index/

    关于vue报错: [Vue warn]: Unknown custom element: <sapn> - did you register the component correctly ...

  6. SQL告警,执行时间长?教你写一手好 SQL !

    博主(编码砖家)负责的项目主要采用阿里云数据库MySQL,最近频繁出现慢SQL告警,执行时间最长的竟然高达5分钟.导出日志后分析,主要原因竟然是没有命中索引和没有分页处理 . 其实这是非常低级的错误, ...

  7. MyBatis-Plus 快速入门

    1.简介 MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生. 1.1.特性 无侵入:只做增强不做改变, ...

  8. logstash写入kakfa数据丢失的问题

    metricbeat采集系统指标,发送到logstash,再写入kafka,发现kafka中的数据不完整,只有某一个指标, 查找原因发现是logstash配置编码问题,如下: input { beat ...

  9. 【IDEA】IDEA项目没有被SVN管理问题

    解决方法 VCS-Enable Version Control Integration

  10. 大一C语言学习笔记(7)---指针篇--什么是指针?什么是指针变量?取地址符“&”的作用是什么?地址运算符“*”的作用是什么,怎么理解两者?

    "指针是C语言的灵魂"这句话一开始我没怎么明白,现在接触了指针,终于知道为什么这么说了,因为....难,真难:下面说一下我对这句话的见解: C语言拥有着其他语言所没有的特性---直 ...