day11 函数
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 函数的更多相关文章
- day11——函数名的使用、f格式化、迭代器、递归
day11 函数名的第一类对象及使用 1.可以当作值被赋值给变量 def func(): print(1) print(func) a = func a() 2.当作元素存放在容器中 def func ...
- python全栈学习--day11(函数高级应用)
一,函数名是什么? 函数名是函数的名字,本质:变量,特殊的变量. 函数名()执行此函数 ''' 在函数的执行(调用)时:打散. *可迭代对象(str,tuple,list,dict(key))每一个元 ...
- day11 函数的参数列表
""" 今日内容: 1.函数参数的分类 2.形参是对实参的值拷贝 3.实参的分类 4.形参的分类 5.打散机制 附1:字符串的比较 """ ...
- day11函数(形参实参)
形参与实参 def fn(形参们): pass # 形参:定义函数,在括号内声明的变量名,用来结束外界传来的值# 实参:调用函数,在括号内传入的实际值,值可以为常量.变量.表达式或三者的组合 # 注: ...
- Python——day11 函数(对象、名称空间、作用域、嵌套、闭包)
一.函数对象 函数名就是存放了函数的内存地址,存放了内存地址的变量都是对象,即 函数名 就是 函数对象 函数对象的应用 1. 可以直接被引用 fn = cp_fn 2 .可以当作函数参数传递 c ...
- python学习day11 函数Ⅲ (内置函数与lambda表达式)
函数Ⅲ(内置函数&lambda表达式) 1.函数小高级 函数可以当做变量来使用: def func(): print(123) func_list = [func, func, func] # ...
- day11函数的参数,函数对象 - 函数名,函数的嵌套调用
复习 # 什么是函数:具体特定功能的代码块 - 特定功能代码块作为一个整体,并给该整体命名,就是函数 # 函数的优点: # 1.减少代码的冗余 # 2.结构清晰,可读性强 # 3.具有复用性,开发效率 ...
- day-11函数的形参与实参
形参与实参 参数介绍: 函数为什么要有参数:因为内部的函数体需要外部的数据 怎么定义函数的参数:在定义函数阶段,函数名后面()中来定义函数的参数 怎么使用函数的参数:在函数体中用定义的参数名直接使用 ...
- python学习Day11 函数的参数列表
复习 什么是函数? 具体特定功能的代码块 - 特定功能代码作为一个整体,并给该整体命名,就是函数 函数的优点 : 1.减少代码的冗余,2.结构清晰,可读性强 3.具有复用性,开发效率高,维护成本高 如 ...
随机推荐
- insertion-sort-list leetcode C++
Sort a linked list using insertion sort. C++ /** * Definition for singly-linked list. * struct ListN ...
- 一步一步学ROP之gadgets和2free篇(蒸米spark)
目录 一步一步学ROP之gadgets和2free篇(蒸米spark) 0x00序 0x01 通用 gadgets part2 0x02 利用mmap执行任意shellcode 0x03 堆漏洞利用之 ...
- java性能优化常用工具jps、jstat、jinfo
jps:虚拟机进程状况工具 jps可以用来查看虚拟机进程,基本等同于ps -ef|grep java #查看jps的使用文档 [root@localhost script]# jps -help us ...
- C++11 多线程同步 互斥锁 条件变量
在多线程程序中,线程同步(多个线程访问一个资源保证顺序)是一个非常重要的问题,Linux下常见的线程同步的方法有下面几种: 互斥锁 条件变量 信号量 这篇博客只介绍互斥量和条件变量的使用. 互斥锁和条 ...
- Iceberg概述
背景 随着大数据领域的不断发展, 越来越多的概念被提出并应用到生产中而数据湖概念就是其中之一, 其概念参照阿里云的简介: 数据湖是一个集中式存储库, 可存储任意规模结构化和非结构化数据, 支持大数据和 ...
- SpringBoot 整合 Docker
最近备忘录新加的东西倒是挺多的,但到了新环境水土不服没动力去整理笔记 1. Demo Project 首先准备一个简单的项目,用来部署到 Docker 主机上,并且能验证该项目是否成功运行 1.1 接 ...
- IDEA下载 使用快捷方式 以及一些小教程
IDEA下载 使用快捷方式 以及一些小教程 Idea下载 网址:链接: https://pan.baidu.com/s/1xRr3mhM6_VDHqC_w0F1MjQ 提取码: 6ypi 下载,安装方 ...
- [cf787E]Till I Collapse
考虑对询问分块,对于i<K的询问,暴力处理,时间复杂度为o(Kn):对于i>K的询问,发现答案都小于n/K且满足单调性,那么可以二分出每一段相同的答案,时间复杂度为$o(n^{2}log_ ...
- [bzoj5510]唱跳rap和篮球
显然答案可以理解为有(不是仅有)0对情况-1对情况+2对情况-- 考虑这个怎么计算,先计算这t对情况的位置,有c(n-3t,t)种情况(可以理解为将这4个点缩为1个,然后再从中选t个位置),然后相当于 ...
- [loj3366]嘉年华奖券
联系绝对值的几何意义/分类讨论,不难发现若$n$张奖券上的数从小到大依次为$a_{i}$,则收益为$\sum_{i=1}^{\frac{n}{2}}a_{i+\frac{n}{2}}-a_{i}$ 假 ...