day8.函数基础
一.函数介绍
1、什么是函数
函数就是盛放代码的容器,把实现某一功能的一组代码丢到一个函数中
就做成了一个小工具
具备某一功能的工具-》函数
事先准备工具的过程-》函数的定义
遇到应用场景拿来就用-》函数的调用
2、为何要用函数
在没有用函数之前面临的问题:
1、代码冗余,程序组织结构不清晰、可读性差
2、扩展性差
3、如何用函数
原则:先定义、后调用
定义函数的语法:
def 函数名(参数1,参数2,参数3,...):
"""
文档注释
"""
代码1
代码2
代码3
return 返回值
调用函数:
函数名(1,2,3)
3:函数在定义阶段发生的什么事情
# 定义函数不执行函数体代码,但是会检测函数体语法
# x = 100
# # print(x)
#
# def func(): # func=函数的内存地址
# print("start...")
# x
# # if True
# # print('ok')
# print("xxx")
# print("stop...")
#
# # print(func)
#
# func()
4:函数在调用阶段发生的什么事情
# 先通过函数名找到函数的内存地址,然后函数的内存地址()会触发函数体代码的运行
# def func(): # func=函数的内存地址
# print("start...")
# print("xxx")
# print("stop...")
#
# func() # x = 10
# x()
二.定义与调用函数的三种形式
(一·)定义函数的三种形式
1.1 无参
# def func():
# print('=====')
# print('hello')
# print('=====')
# func()
1.2 有参
# def max2(x,y):
# if x > y:
# print(x)
# else:
# print(y)
# max2(10,11) # def login(user,pwd):
# # user = input("u>>>: ")
# # pwd = input("p>>>: ")
# if user == 'egon' and pwd == '123':
# print('ok')
# else:
# print('error')
# login('egon','123')
1.3 空函数
def func():
# pass
(二) 调用函数的三种形式
2.1 语句形式
# def login():
# user = input("u>>>: ")
# pwd = input("p>>>: ")
# if user == 'egon' and pwd == '123':
# print('ok')
# else:
# print('error')
# login()
2.2 表达式形式
# res = input(">>: ") # def max2(x,y):
# if x > y:
# return x
# else:
# return y
# sal = max2(30,40) * 12
2.3 可以把函数调用当做参数传给另外一个函数
# def max2(x,y):
# if x > y:
# return x
# else:
# return y
#
# res = max2(max2(10,20),30)
# print(res)
三.函数的参数
(一) 函数参数分为两大类:
1、形参:在函数定义阶段括号内定义的变量名,称之为形式参数,简称形参
2、实参:在函数调用阶段括号内传入的值,称之为实际参数,简称实参
形参与实参的关系是:
在调用函数时,实参的值会绑定给形参名,然后可以在函数内使用,函数调用完毕后,解除绑定
# def func(x,y):
# # x=1
# # y=2
# print(x+y)
#
# m = 1
# n = 2
# func(m,n)
(二) 参数详解
2.1 位置形参::在函数定义阶段按照从左到右的顺序依次定义的形参,称之为位置形参
# def func(x,y):
# print(x+y) # func(1,2)
# func(1,2,3) #报错
# func(1,) #报错
2.2 默认形参:在函数定义阶段就已经为某个形参赋值了,称之为默认形参
特点:在函数定义阶段就已经赋值了,意味着在调用阶段可以不用为其赋值
ps: 可以混用位置形参与默认形参,但是位置形参必须在前
# def func(x,y=2):
# print(x)
# print(y) # func(1,3)
# func(1)
*# 默认形参需要注意的问题是:
1、默认形参的值只在函数定义阶段被赋值一次
2、默认形参的值通常应该是不可变类型
# 案例1
# m = 100
# def func(x,y=m): # y -> 100的内存地址
# print(x,y)
#
# m = 200
# func(1) # 案例2
# m = [11,22,]
# def func(x,y=m): # y -> [11,22,]的内存地址
# print(x,y)
#
# # m = 200
# m.append(33)
# func(1) # def register(name,x,hobbies=None): # hobbies = []内地址
# if hobbies is None:
# hobbies = []
# hobbies.append(x)
# print("%s 的爱好是 %s" %(name,hobbies))
#
# register("egon",'read')
# register("liu",'chou')
# register("hxx",'tang')
2.3 位置实参:在函数调用阶段按照从左到右的顺序依次传入的值,称之为位置实参
特点:按照顺序与形参一一对应
# def func(x,y):
# print(x)
# print(y)
#
# func(1,2)
# func(2,1)
2.4 关键字实参:在函数调用阶段按照key=value的格式传入的值,称之为关键字实参
特点:可以打乱顺序,但是仍然能够为指定的形参赋值
ps:可以混用位置实参与管家腻子实参,但是
1、位置实参必须在关键字实参前
2、不能为同一个形参重复赋值
# def func(x,y):
# print(x)
# print(y) # func(y=2,x=1)
# func(1,y=2)
# func(y=2,1) #报错
# func(1,2,y=3) #报错
2.5 *与**在形参与实参中的应用
可变长的参数:可变长指的是在函数调用阶段,实参的个数不固定,而实参是为形参赋值的,所以对应着必须要有一种特殊格式的形参
能用来接收溢出的实参
# 形参中带*:*会接收溢出的位置实参,然后将其存成元组,然后赋值给紧跟其后的变量名
# def func(x,*args): # y=(2, 3, 4, 5, 6)
# print(x)
# print(args)
#
# func(1,2,3,4,5,6) # def my_sum(*args):
# res = 0
# for num in args:
# res += num
# print(res)
#
# my_sum(1,2,3,4,5)
# my_sum(1,2)
# 形参中带**:**会接收溢出的关键字实参,然后将其存成字典,然后赋值给紧跟其后的变量名
# def func(x,**kwargs): #y = {'a':1,'b':2,'c':3}
# print(x)
# print(kwargs) # func(1,a=1,b=2,c=3)
# func(1,2,3,a=1,b=2,c=3) # 报错
# 实参中带*:*后跟的必须是一个可以被for循环遍历的类型,*会将实参打散成位置实参
# def func(x,y,z):
# print(x)
# print(y)
# print(z) # func(*[11,22,33]) # func(11,22,33)
# func(*"hello") # func("h","e","l","l","o") #报错
# 实参中带**:**后跟的必须是一个字典,**会将实参打散成关键字实参
# def func(x,y,z):
# print(x)
# print(y)
# print(z)
#
# func(**{"x":1,"y":2,"z":3}) # func(z=3,x=1,y=2)
2.6命名关键字参数:
*后定义的参数,必须被传值(有默认值的除外),且必须按照关键字实参的形式传递可以保证,传入的参数中一定包含某些关键字
def foo(x,y,*args,a=1,b,**kwargs):
print(x,y)
print(args)
print(a)
print(b)
print(kwargs) foo(1,2,3,4,5,b=3,c=4,d=5)
结果:
1
2
(3, 4, 5)
1
3
{'c': 4, 'd': 5}
四.函数的返回值
用return控制函数的返回值:
函数内可以有多个return,但只要执行一次,整个函数就立即结束,并且将return后的
值当做本次调用的结果返回,具体来说,函数的返回值又分为三类
1、return 值:返回的就是该值本身
2、return 值1,值2,值3:返回的是一个元组
3、函数内可以没有return,或就一个return后没有值:返回的是None
# def func():
# print("start")
# # return 123,"aa",[1,2,3]
# # return
# print("end")
#
# res = func()
# print(res) # def max2(x,y):
# # x = 3.3
# # y = 5.5
# if x > y:
# return x
# else:
# return y
#
# res = max2(3.3,5.5)
# print(res * 12)
day8.函数基础的更多相关文章
- python全栈开发-Day8 函数基础
python全栈开发-Day8 函数 一 .引子 1. 为何要用函数之不用函数的问题 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需 ...
- 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数
[源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...
- JavaScript 函数基础
1. JavaScript 函数基础 1. 定义方法 2. 函数的调用方法 3. 函数方法 apply : 将函数作为数组的方法来调用 将参数以数组形式传递给该方法 call : 将函数作为对象的 ...
- Python 函数基础、有序集合、文件操作(三)
一.set 特点: set是一个无序且不重复的元素集合访问速度快:天生解决元素重复问题 方法: 初始化 >>> s1 = set()>>> print(type(s ...
- 【2017-03-05】函数基础、函数四种结构、ref和out参数、递归
一.函数基础 1.函数/方法:非常抽象独立完成某项功能的一个个体 2.函数的作用: 提高代码的重用性提高功能开发的效率提高程序代码的可维护性 3.分类 固定功能函数高度抽象函数 4.函数四要素:输入, ...
- PHP基础入门(三)---PHP函数基础
PHP基础入门(三)---函数 今天来给大家分享一下PHP的函数基础.有了前两章的了解,想必大家对PHP有了一定的基础了解.想回顾前两章的朋友可以点击"PHP基础入门(一)"&qu ...
- PHP基础入门(二)【PHP函数基础】
PHP基础入门(二)--函数基础 了解 PHP基础入门详解(一) 后,给大家分享一下PHP的函数基础. 这部分主要讲的就是: 函数的声明与使用.PHP中变量的作用域.静态变量.函数的参数传递.变量函数 ...
- 09-Python入门学习-函数基础与参数
一.函数基础 1.定义函数的三种形式 1.1 无参函数 def foo(): print('from foo') foo() 1.2 有参函数 def bar(x,y): print(x,y) bar ...
- Python学习day9 函数Ⅰ(基础)
函数Ⅰ(基础) 三目运算 基本结构 v = 前面 if 条件 else 后面 #条件为真v=前面,条件为假v=后面.#等同于if 条件: v = '前面'else: v = '后面' ...
随机推荐
- Django Admin 后台Admin继承UserAdmin增加用户密码不显示明文和用户登录不了的解决方法
Django后台Admin继承UserAdmin增加用户不显示明文方法 1.在 models.py 中用户表 # 导包规范-1.Python标准模块 from django.db import mod ...
- Navicat premium对数据库的结构同步和数据同步功能
一.在目标数据库新建一个相同的数据库名. 二.工具-->结构同步. 三.填写源数据库和目标数据库. 四.点击比对 五.点击部署 六.点击运行 七.点击关闭.此时源数据库的结构已经同步到目标数据库 ...
- Ajax的基本用法
1.介绍 2.基本用法 2.1原生写法 $.ajax({ url: url, //是否是异步请求,默认是 // async: false, //请求方式,默认是get //type:'get', // ...
- C#语言特性及发展史
本文按照C#语言的发展历史,介绍C#每个版本的新增特性,主要参考微软官方文档.了解这些语言特性可以帮助我们更高效的编写C#代码. C# 1.0 与Visual Studio .NET 2002一起发布 ...
- 第48天学习打卡(HTML 行内元素和块元素 列表 表格 视频和音频 页面结构分析 iframe内联框架 表单语法 )
行内元素和块元素 块元素 无论内容多少,该元素独占一行 (p.h1-h6) 行内元素 内容撑开宽度,左右都是行内元素的可以排在一行 (a.strong.em...) 列表 什么是列表 ...
- 使用gitlab构建基于docker的持续集成(一)
使用gitlab构建基于docker的持续集成(一) gitlab docker aspnetcore 持续集成 开篇 整体环境规划 准备工作 CA证书 虚拟机系统:安装Centos7.3 3.设置C ...
- spring boot自定义类配置绑定在配置文件中自动提示
在spring boot的日常使用中,我们可能需要使用配置绑定的方式动态配置自定义类的成员变量. 这个时候,我们在配置文件中配置spring默认已有的配置时,只需要输入部分关键字即可自动提示,如下图: ...
- 178. 分数排名 + MySql + RANK() OVER
178. 分数排名 LeetCode_MySql_178 题目描述 题解分析 排名函数 DENSE_RANK().如果使用 DENSE_RANK() 进行排名会得到:1,1,2,3,4. RANK() ...
- [同步到 MaixPy3 文档] 使用 Python 编程入门开源硬件项目
本文是给有一点 Python 基础但还想进一步深入的同学,有经验的开发者建议跳过. 前言 在写这篇案例系列的时候 junhuanchen 期望能够引导用户如何成为专业的开发者,不是只会调用代码就好,所 ...
- FreeBSD 的xfce 终端动态标题不显示问题解决了:
tcsh配置,home目录创建.tcshrc, 写入以下配置 alias h history 25 alias j jobs -l alias la ls -aF alias lf ls -FA al ...