~~函数基础(一):函数&参数~~
进击のpython
*****
函数基础(一):参数
说明一点奥,如果你前置文章没有看懂,那么不建议你直接看这个
因为看了也是浪费时间,没有意义
好,接下来就是Python的灵魂部分了——函数
在历史的长河中,遇到复杂问题的时候,人们总是想能不能对这个问题简单化处理
于是,模块啊,函数啊什么的,包括各种算法就接踵而至了
那函数原先是怎么想出来的呢?
在原先啊,人们遇到了一个这样的问题
# 报警装置,出现问题,发送问题到邮件
很正常的需求是吧
怎么写的呢(伪代码)
A = 故障
if A == "警报故障"
打开QQ邮箱
编辑警报故障邮件
发送邮件
关闭QQ邮箱
if A == "排水故障"
打开QQ邮箱
编辑排水故障邮件
发送邮件
关闭QQ邮箱
if A == "储水故障"
打开QQ邮箱
编辑储水故障邮件
发送邮件
关闭QQ邮箱
... ...
刚开始人们就这么写的,但是很快,有人就发现了问题
这段代码存在大量的重复语句
虽然可以当“CV工程师”,但是人类还是要进步的
所以人们就在想
把这些重复,多次使用的代码语句放在“盒子”里,用的时候直接把盒子拿出来
于是,函数就出现了!
这段代码就可以变成这样(先别问为什么,看效果!):
def send_mail(x):
打开QQ邮箱
编辑x邮件
发送邮件
关闭QQ邮箱
A = 故障
send_mail(A)
是不是简单太多了!
现实情况讲完了,那就开始函数的学习之旅吧!
语法
语法是个很重要的环节,需要注意以下几点:
def 后面要有空格
函数命名遵循变量命名规则
函数名后面有括号()
括号后面有冒号:
def send_mail(): # 定义一个名为 send_mail 的函数
接着首行缩进,写你的代码,和正常写代码一样
def send_mail():
print("这是一个函数")
好了,函数部分的代码写完了
你现在执行是执行不了的,为什么?因为你还没调用
怎么调用?问的好!
其实我们在前面写的这个
print()
这就是Python自带的一个名为print的函数
那我们自定义名为send_mail的函数要怎么调用呢?
send_mail()
能理解是吧(不能理解就再看一遍!!!)
参数
其实你应该刚才有个疑问
我刚才介绍函数定义的时候,()里面是空的,但是我的例子里面是(x)
那这个 x 是什么呢?
这就触及到你的知识盲区了
接下来要讲两个概念
实参 形参
实参:
你看人起的名字,实参
什么是实参?实实在在的参数,或者说
真实的参数
举个例子:
print("App")
这个App就是我要处理的数据,因为我要打印这个对吧
那他就是参数
我知道这个参数的内容吧 App 嘛,是不
所以 这个 App 就是真实的参数,就是实参!
听懂掌声!
那听你这意思,还有不真实的参数呗?
形参:
形式参数,就是不真实的参数
好了,例子说话
def send_mail(x):
来吧,我是不是要通过函数来处理这个x?
那这个x是不是参数?
那你告诉我,x是什么?
1?2?猫?狗?
不知道吧!
那就是形参!
默认参数
你以为参数就两种??想多了奥铁汁!
要真这么简单,怎么能称之为灵魂呢?
什么叫默认?就是你不改他就输出默认的东西
比如你某些App选择城市的时候,是不是默认的就是北京?
那这个默认的就是默认参数
来个例子
def city(x="北京"):
print(x) city()
city("上海")
为什么是这样的呢?
当你没有给这个city函数变量的时候,city函数就使用默认的“北京”这个参数传递给x;而当你给它一个“上海”这个参数的时候,就用你的参数传递给x
懂了吗?凑弟弟!
感觉应该叫关键字参数!
更像是字典的 key-value 模式
def func(x, y, z):
print("x:", x)
print("y:", y)
print("z:", z)
func(y=1, z=2, x=3)
简单不?懂了没?是不是挺像 key-value 的字典模式的!
位置参数
位置参数!就是一个萝卜一个坑!
def func(x, y, z):
print("x:", x)
print("y:", y)
print("z:", z) func(1, 2, 3)
按顺序一个一个来,这没啥讲的。
非固定参数
最后一种了奥,啥叫非固定参数呢?
我们还是看这个函数:
def func(x, y, z):
print("x:", x)
print("y:", y)
print("z:", z)
那我想用这个函数,但是我想传四个参数怎么办?直接写?
func(1,2,3,4)
一定会报错!因为你 4 这个参数都没有变量接着,一定会报错啊!
于是乎,聪明的“懒人”们就搞出了这个东西
*args
别问,用就完了!
args就是把你多出来的位置参数,以元组的方式储存起来的一个容器
*args就是把你多出来的位置参数,打散打印出来!
def func(x, y, z,*args):
print("x:", x)
print("y:", y)
print("z:", z)
print("其他",*args)
print("其他",args)
func(1,2,3,4,5)
x: 1
y: 2
z: 3
其他 4 5
其他 (4, 5)
ok不?了解了不?
那就再来个刺激的!
**kwargs
什么鬼?????这是啥??????
这是关键参数溢出的存储容器
def func(x, y, z, *args, **kwargs):
print("x:", x)
print("y:", y)
print("z:", z)
print("其他", *args)
print("**kwargs:", kwargs)
func(1, 2, 3, 4, 5, key="hello")
它是以字典的形式存储的,哈哈哈哈哈哈哈哈哈!!!!!!!!!
*基础中的基础*
*灵魂中的灵魂*
~~函数基础(一):函数&参数~~的更多相关文章
- 【2017-03-05】函数基础、函数四种结构、ref和out参数、递归
一.函数基础 1.函数/方法:非常抽象独立完成某项功能的一个个体 2.函数的作用: 提高代码的重用性提高功能开发的效率提高程序代码的可维护性 3.分类 固定功能函数高度抽象函数 4.函数四要素:输入, ...
- Python函数基础和函数参数
函数的定义和函数的调用 return的作用 三种参数的定义 常用的内置函数 len() 函数基础 函数的定义 def 函数名(参数): pass return 表达式 pass在这里表示什么都没有,不 ...
- python函数基础以及函数参数简解
python中函数分为函数.内置函数Python所有的内置函数 自定义函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. ...
- 潭州课堂25班:Ph201805201 第八课:函数基础和函数参数 (课堂笔记)
1, 函数定义 def fun(): print('测试函数') fun() #调用函数 return 运行函数返回值 def fun(): name = [1,3,4,5] return name[ ...
- day10.函数基础及函数参数
一.函数 功能:包裹一部分代码 实现某一个功能 达成某一个目的 特点: """ 特点:可以反复调用,提高代码的复用性,提高开发效率,便于维护管理 函数基本格式 函数的定义 ...
- Python 入门基础10 --函数基础3 函数对象、名称空间、装饰器
今日内容 1.函数对象 2.名称空间与作用域 3.函数的嵌套调用与闭包 4.装饰器 一.函数对象 1.1 定义 函数名存放的就是函数地址,所以函数名也就是对象,称之为函数对象 1.2 函数对象的应用 ...
- python函数基础(函数的定义和调用)
函数的定义 python定义函数使用def关键字 return[表达式]语句用于退出函数,选择性的向调用方返回一个表达式,不带参数值的return语句返回none def 函数名(参数列表): 函数体 ...
- python 新手函数基础(函数定义调用值传递等)
1.编程的集中主要方式: 面向过程 >类 >>关键字class 面向函数>函数 >> 关键字def 面向过程> 过程 >> 关键字def 2.py ...
- python基础知识06-函数基础和函数参数
函数基础和函数参数 可迭代对象:序列类型 range . 1.函数的定义 def 函数名(参数): pass return 表达式 ,不能是赋值语句.不写默认返回None.用逗号隔开返回一个元组. 函 ...
- PHP基础入门(三)---PHP函数基础
PHP基础入门(三)---函数 今天来给大家分享一下PHP的函数基础.有了前两章的了解,想必大家对PHP有了一定的基础了解.想回顾前两章的朋友可以点击"PHP基础入门(一)"&qu ...
随机推荐
- shell转义符
转义是一种引用单个字符的方法. 一个前面放上转义符 (\)的字符就是告诉shell这个字符按照字面的意思进行解释, 换句话说, 就是这个字符失去了它的特殊含义. 在某些特定的命令和工具中, 比如ech ...
- C++ 标准库概览(一分钟就看完了)
C++ 标准库以若干头文件的方式提供. 下面简单介绍一个各头文件的内容. 第一部分 容器 Containers <array> C++11 新增.提供了容器类模板 std::array,固 ...
- UWP 使用Windows.Web.Http命名空间下的HttpClient使用post方法,上传图片服务器
1.从相册里面选取图片 /// <summary> /// 1.1 从相册里面选取图片 /// </summary> /// <param name="send ...
- MongoDB数据查询
启动MongoDB:sudo service mongodb start,mongo 经测试,键可加引号也可不加,但是值一般要加引号,数值类型除外 MongoDB区分大小写,命名通常采用驼峰式命名法 ...
- SVN更新报错问题(Please execute the 'Cleanup' command)
SVN更新报错问题(Please execute the 'Cleanup' command) https://segmentfault.com/a/1190000012571289 svn: E20 ...
- 关于联合体union的详细解释
1.概述 联合体union的定义方式与结构体一样,但是二者有根本区别. 在结构中各成员有各自的内存空间,一个结构变量的总长度是各成员长度之和.而在“联合”中,各成员共享一段内存空间,一个联合变量的长度 ...
- React Native v0.4 发布,用 React 编写移动应用
React Native v0.4 发布,自从 React Native 开源以来,包括超过 12.5k stars,1000 commits,500 issues,380 pull requests ...
- java设计模式-单例(singleton)
单例模式,是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例.即一个类只有一个对象实例 如何保证对象唯一性呢? 思想: ...
- javascript“命名空间”的费曼输出[原创]
Javascript由于没有命名空间的概念,所以好多的框架或库就用了某些“命名空间”的技巧.在学习作为函数的命名空间时,我翻阅了好多的书本和blog,很多的概念和说明都是要么过于烦杂或过于简单.现在由 ...
- 系统学习 Java IO (十二)----数据流和对象流
目录:系统学习 Java IO---- 目录,概览 DataInputStream/DataOutputStream 允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型. 要想使用 ...