学习4:内容# 1.列表 # 2.元祖 # 3.range
一 初识函数
大家都有没有玩过陌陌,探探这种软件?这种软件是专门为你们没有对象的男士设置的,这是一款合理合法的约炮,哦不对,交友软件,那么现在我们用Python代码简单模拟一下:
print("拿出手机")
print("打开陌陌")
print('左滑一下')
print('右滑一下')
print("找个漂亮的妹子")
print("问她,约不约啊!")
print("ok 走起")
ok so easy我们已经完成了我们模拟探探的需求,其实我们做的这个就是一个功能,什么功能呢?就是交友的功能,那么问题来了, 我还想在约一次整么搞,是不是就是在写一遍
# 约一次
pint("拿出手机")
print("打开陌陌")
print('左滑一下')
print('右滑一下')
print("找个漂亮的妹子")
print("问她,约不约啊!")
print("ok 走起")
# 再约一次
pint("拿出手机")
print("打开陌陌")
print('左滑一下')
print('右滑一下')
print("找个漂亮的妹子")
print("问她,约不约啊!")
print("ok 走起")
那么这样写好么? 当然不好了,为什么呢? 重复代码太多了。 所以我们能否将这些代码放到一个地方,想用这些代码了,我就通过一个指令,调用过来,不想用就不写这个指令就行了,这样就能极大限度的减少代码的重复率,那么咱们看下面:
def date():
print("拿出手机")
print("打开陌陌")
print('左滑一下')
print('右滑一下')
print("找个漂亮的妹子")
print("问她,约不约啊!")
print("ok 走起")
那么这里,我写了一个约会的功能,我将上面的那些重复代码封装到这个所谓的函数中,这样,我什么时候需要使用这个功能,我通过一个指令调用即可。
def date():
print("拿出手机")
print("打开陌陌")
print('左滑一下')
print('右滑一下')
print("找个漂亮的妹子")
print("问她,约不约啊!")
print("ok 走起")
date() # 调用函数
上面这个就是一个函数,那么接下来我们就来研究一下这个函数。
从上面的对比我们看一下函数的优势:
1,减少代码的重复性。
2,使代码可读性更好。
二. 函数的结构与调用
2.1函数的结构
首先咱们先看一下函数的结构:
def 函数名():
函数体
def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。
def 是固定的,不能变,他就是定义函数的关键字。
空格 为了将def关键字和函数名分开,必须空(四声),当然你可以空2格、3格或者你想空多少都行,但正常人还是空1格。
函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并且要具有可描述性
括号:是必须加的,先别问为啥要有括号,总之加上括号就对了(下面就会讲到)!
下面的函数体一定全部都要缩进,这代表是这个函数的代码。
我们现在就来实现刚刚我们说的定义一个约会功能:
def date():
print("拿出手机")
print("打开陌陌")
print('左滑一下')
print('右滑一下')
print("找个漂亮的妹子")
print("问她,约不约啊!")
print("ok 走起")
哦了,这就定义完了,但是这个时候我们去执行,会发生什么现象? 什么都没有发生.因为我只定义了一个函数.但是还没有执行过这个函数.
2.2函数的调用
使用函数名加小括号就可以调用了 写法:函数名() 这个时候函数的函数体会被执行
通过上面的动态图大家可知,只有解释器读到函数名() 时,才会执行此函数,如果没有这条指令,函数里面即使有10万行代码也是不执行的。
而且是这个指令你写几次,函数里面的代码就运行几次,就好比你在部队,我喊你名字,喊几次,你就得 到 几次,这就是指令。
直接调用定义好的函数就可以了 咱们约完之后的得有个结果吧, 比如是约的萝莉,还是大妈啊总得有个结果,那么这个结果
怎么来描述和获得呢? 这就涉及到函数的返回值啦
三. 函数的返回值
一个函数就是封装一个功能,这个功能一般都会有一个最终结果的,比如你写一个登录函数,最终登录成功与否是不是需要返回你一个结果?还有咱们是不是都用过len这个函数,他是获取一个对象的元素的总个数,最终肯定会返回一个元素个数这样的结果:
s1 = 'abfdas'
print(len(s1)) # 6
那么这个返回值如何设置呢?这就得用到python中的一个关键字:return
def date():
print("拿出手机")
print("打开陌陌")
print('左滑一下')
print('右滑一下')
print("找个漂亮的妹子")
return
print("问她,约不约啊!")
print("ok 走起")
- 函数中遇到return,此函数结束.不在继续执行
那么函数的返回值,既然叫做返回值,他就是返回一些数据,那么返回给谁呢?
跟我们之前使用的len一样,函数的返回值返回给了 函数名() 这个整体,也就是这个执行者。
- return 会给函数的执行者返回值。
当然,也可以返回多个值。
如果返回多个值,是以元组的形式返回的。
总结一下:
1.遇到return,函数结束,return下面的(函数内)的代码不会执行。
2.return 会给函数的执行者返回值。
如果return后面什么都不写,或者函数中没有return,则返回的结果是None
如果return后面写了一个值,返回给调用者这个值
如果return后面写了多个结果,,返回给调用者一个tuple(元组),调用者可以直接使用元组的解构获取多个变量。
def date():
print("拿出手机")
print("打开陌陌")
print('左滑一下')
print('右滑一下')
print("找个漂亮的妹子")
print("问她,约不约啊!")
print("ok 走起")
return '漂亮的妹子','小萝莉', '成熟女性'
g1,g2,g3 = date()
print(g1, g2, g3) # 漂亮的妹子 小萝莉 成熟女性
四. 函数的参数
我们上面研究了,函数的结构,函数的执行,以及函数的返回值。对函数有一个初步的了解,那么接下来就是一个非常重要的知识点,函数的参数。函数是以功能为导向的,上面我们写的函数里面的代码都是写死的,也就是说,这个函数里面的更改起来很麻烦,试想一下,我们使用探探,陌陌等软件,可不可以进行筛选,比如选择性别,年龄等,导出结果? 再拿我们之前学过的len 这个len是不是可以获取字符串的总个数?是不是可以获取列表的总个数?你更改了len函数内部的代码了?没有吧?你看下面的例子:
s1 = 'sfdas'
l1 = [1, 3, 7]
print(len(s1)) # 5
print(len(l1)) # 3
那么我们写的函数也是可以将一些数据传到函数里面的,然后让里面的代码利用上这个数据产生我们想要的结果,在返回。
举个例子:
def date(sex):
print("拿出手机")
print("打开陌陌")
print('设置筛选条件:性别: %s' %sex)
print("找个漂亮的妹子")
print("问她,约不约啊!")
print("ok 走起")
date('女')
上面就是函数传参的示例,函数的参数可以从两个角度划分:
1.形参
写在函数声明的位置的变量叫形参,形式上的一个完整.表示这个函数需要xxx
2.实参
在函数调用的时候给函数传递的值.加实参,实际执行的时候给函数传递的信息.表示给函数xxx
函数的传参就是函数将实际参数交给形式参数的过程.
def date(sex): # 函数定义时(参数) 这个就是形参
print("拿出手机")
print("打开陌陌")
print('设置筛选条件:性别: %s' %sex)
print("找个漂亮的妹子")
print("问她,约不约啊!")
print("ok 走起")
date('女') # 函数执行时(参数) 这个就是实参
# 这个过程就是:代码运行到date('女')开始执行此函数同时将字符串'女'这个数据传递给变量sex,然后执行函数中的代 # 码。如果遇到sex,其实就是使用'女'这个数据。
我们先从实参角度学习函数的参数。
实参角度
1, 位置参数
位置参数就是从左至右,实参与形参一一对应。
def date(sex, age, hobby):
print("拿出手机")
print("打开陌陌")
print('设置筛选条件:性别: %s,年龄:%s,爱好:%s' %(sex, age, hobby))
print("找个漂亮的妹子")
print("问她,约不约啊!")
print("ok 走起")
date('女','25~30','唱歌')
date('人妖','20~25','萝莉音')
练习
编写函数,给函数传递两个参数a,b a,b相加 返回a参数和b参数相加的和
def f(a,b):
c = a+b
return c
num_sum = f(5,8)
print(num_sum)
结果: 13
编写函数,给函数传递两个参数a,b 比较a,b的大小 返回a,b中最大的那个数
def f(a,b):
if a>b:
return a
else:
return b
num_sum = f(5,8)
print(num_sum)
结果:8
比较大小的这个写法有点麻烦,我们在这里学一个三元运算符
def f(a,b):
c = a if a > b else b #当a>b就把a赋值给c,否则就把b赋值给c
return c
msg = f(5,7)
print(msg)
结果:
7
2, 关键字参数
位置参数好不好呢? 如果是少量的参数还算OK, 没有问题. 但是如果函数在定义的时候参数非常多怎么办? 程序员必须记住, 我有哪些参数, 而且还有记住每个参数的位置, 否则函数就不能正常调用了. 那则么办呢? python提出了一种叫做关键字参数. 我们不需要记住每个参数的位置. 只要记住每个参数的名字就可以了
def date(sex, age, hobby):
print("拿出手机")
print("打开陌陌")
print('设置筛选条件:性别: %s,年龄:%s,爱好:%s' %(sex, age, hobby))
print("找个漂亮的妹子")
print("问她,约不约啊!")
print("ok 走起")
date(hobby='唱歌',sex='女',age='25~30',)
搞定, 这样就不需要记住繁琐的参数位置了.
3, 混合参数
可以把上面两种参数混合着使用. 也就是说在调用函数的时候即可以给出位置参数, 也可以指定关键字参数.
混合参数一定要记住:关键字参数一定在位置参数后面。
def date(sex, age, hobby):
print("拿出手机")
print("打开陌陌")
print('设置筛选条件:性别: %s,年龄:%s,爱好:%s' %(sex, age, hobby))
print("找个漂亮的妹子")
print("问她,约不约啊!")
print("ok 走起")
date('女',hobby='唱歌',age='25~30',)
综上: 在实参的⾓角度来看参数分为三种:
1. 位置参数
2. 关键字参数
3. 混合参数, 位置参数必须在关键字参数前面
接下来我们从形参角度分析,函数的参数
形参角度
1, 位置参数
位置参数其实与实参角度的位置参数是一样的,就是按照位置从左至右,一一对应
def date(sex, age, hobby):
print("拿出手机")
print("打开陌陌")
print('设置筛选条件:性别: %s,年龄:%s,爱好:%s' %(sex, age, hobby))
print("找个漂亮的妹子")
print("问她,约不约啊!")
print("ok 走起")
date('女','25~30','唱歌')
2, 默认值参数
在函数声明的时候, 就可以给出函数参数的默认值. 默认值参数一般是这个参数使用率较高,才会设置默认值参数,可以看看open函数的源码,mode=‘r’就是默认值参数. 比如, 我们录入咱们班学生的基本信息. 通过调查发现. 我们班大部分学生都是男生. 这个时 候就可以给出⼀一个sex='男'的默认值.
def stu_info(name, age, sex='男'):
print("录入学生信息")
print(name, age, sex)
print("录入完毕")
stu_info("张强", 18)
注意:必须先声明在位置参数,才能声明关键字参数
综上:在形参的角度来看
- 位置参数
- 默认认值参数(大多数传进来的参数都是一样的, 一般用默认参数
函数的形参角度参数还有两种,亲看下一篇博客
学习4:内容# 1.列表 # 2.元祖 # 3.range的更多相关文章
- 学习4:总结# 1.列表 # 2.元祖 # 3.range
列表 -- list 有序,可变的,索引, 作用:存储数据的,支持很多种数据类型 定义方式: lst = [1,"alex","黑哥"] 增: append 追 ...
- python学习笔记(一)、列表和元祖
该一系列python学习笔记都是根据<Python基础教程(第3版)>内容所记录整理的 1.通用的序列操作 有几种操作适用于所有序列,包括索引.切片.相加.相乘和成员资格检查.另外,Pyt ...
- Python学习笔记-数字,列表,元祖,切片,循环
数字 1,加减乘除:+,-,*,/ 2,平方:** 3,立方:**3 4,字符串转换:str(数字) 5,浮点数:带小数点 0.2 Python编程建议 import this >>&g ...
- 《Python》 列表、元祖和range
一.列表: 1.Python基础数据类型之一: 2.其他语言中也有列表的概念,js 数组: 3.可索引,可切片,可加步长: 4.列表可以存储大量的数据: 第一:索引,切片,切片+步长. 第二:增删改查 ...
- 列表,元祖,range
列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: li = ['alex',12 ...
- 从入门到自闭之Python列表,元祖及range
1.列表 数据类型之一,存储数据,大量的,存储不同类型的数据 列表是一种有序的容器 支持索引 列表是一种可变数据类型 原地修改 列表中只要用逗号隔开的就是一个元素,字符串中只要是占一个位置的就是一个元 ...
- Day 04 列表,元祖,range
列表: why: 1.字符串取值费劲 2.对字符串做任何操作,取出来的都是字符串 3.字符串有长度限制 基于以上原因,python提供了另一个数据类型,list 容器类数据类型. 列表页脚数组,可以存 ...
- Python基础-列表、元祖、字典、字符串
列表和分组 序列概览: 数据结构是通过某种方式组织在一起的数据元素的集合.这些元素可以是数字.字符,甚至可以是其他数据结构. 在python中,最基本的数据结构是序列(sequence). 序列中的每 ...
- python基础--列表、元祖、字典、集合
列表(List) 1.列表特点 列表是可变的!! list 是一种有序的序列,可以添加.删除其中的元素,并且可以通过下标(索引)访问 数据 2.简单的常用操作 A.通过下表访问元素 print(lis ...
随机推荐
- Win8 Metro(C#)数字图像处理--2.55OSTU法图像二值化
原文:Win8 Metro(C#)数字图像处理--2.55OSTU法图像二值化 [函数名称] Ostu法图像二值化 WriteableBitmap OstuThSegment(Writ ...
- LIBCMTD.lib(exe_winmain.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 中被引用
这个问题是没找到程序入口 在网上查这个问题,一般都是说两条: (若是win32程序) 一是在项目属性\CC++\预处理器\预处理器定义\里添加 _WINDOWS 一是在项目属性\链接\系统 里选择 窗 ...
- Win10自带应用不喜欢?一条命令全部卸载
与Win8/Win8.1一样,Win10中继续内置了应用商店,所不同的是Windows10中已升级为通用应用商店,具有跨平台特性.可能有的朋友仍不喜欢使用Modern应用,因为传统桌面应用几乎能够满足 ...
- 硬盘可以支持140万小时(也就是159年)的MTBF(硬盘只是一次性的投入)
1.硬盘的的确确是一个一次性投入: 最普通的家用硬盘寿命都可以到达平均5年以上:企业级的硬盘的寿命更是长的离谱,如这个西数为数据中心提供的硬盘: WD Re:页面上说明该种硬盘可以支持140万小时(也 ...
- 网站运行编译器错误CS1617: 选项“6”对 /langversion 无效;必须是 ISO-1、ISO-2、3、4、5 或 Default
运行winform程序时提示, CS1617: 选项“6”对 /langversion 无效:必须是 ISO-1.ISO-2.3.4.5 或 Default 找到网站的web.config配置文件,找 ...
- 2016最受欢迎国产开源软件评选,2016 年度开源中国新增开源软件排行榜 TOP 100
http://www.oschina.net/news/80154/2016-cn-open-source-software-top http://www.oschina.net/project/to ...
- LFS Linux From Scratch 笔记(经验非教程)
做了一个自己的DIY Linux系统.从编译每一行代码,建立每一个文件系统结构开始. 创造自己的GNU/Linux系统,不同于任何发行版.按照的教程是来自 linuxfromscratch.org 来 ...
- hadoop 数据抽取
#!/bin/bash if [ ! -z $2 ]; then start_time=$1 end_time=$2 else starttime=`date +%Y%m%d%H%M -d '-15 ...
- GO方法与接口
Go语言没有沿袭传统面向对象编程中的诸多概念,比如继承.虚函数.构造函数和析构函数.隐藏的this指针等. 方法 Go 语言中同时有函数和方法.方法就是一个包含了接受者(receiver)的函数,re ...
- C语言实现常用数据结构——链表
#include<stdio.h> #include<stdlib.h> typedef struct Node { int data; struct Node *next; ...