1.函数

1.1 认识函数

定义一个事情或者是功能,等到需要的时候直接去用就好了.那么这里定义东西就是一个函数
函数:对代码块和功能的封装和定义

函数的好处:

  1. 减少代码的重复性
  2. 代码可读性高
  3. 将功能进行封装(造工具)

​

1.2 定义函数

​ 结构:

def 函数名():
    函数体

​ def 关键字

​ func 函数名

​ () 传递参数

​ : 语句结束

​ 函数体:就是函数被执行之后要执行的代码

​

1.3 调用函数

​ 使用函数名加小括号就可以调用了 写法:函数名() 这个时候函数的函数体会被执行

def walk():
    print("出宿舍门")
    print("下楼梯")
    print("出大楼门")
    print("右转直行200米")
    print("再右转直行100米")

walk()   # 这是walk函数的调用

结果:
出宿舍门
下楼梯
出大楼门
右转直行200米
再右转直行100米

1.4 函数的执行流程

1.5 函数的返回值

执行完函数之后,我们可以使用return来返回结果

​ 函数中遇到return,此函数就立马结束了.不在继续执行

​ 当函数的返回值是多个的时候,返回的就是一个元组

​ 总结一下:

   1.return 返回值

   2.遇到return,此函数结束,函数后面的东西将不会在执行

​ 3.return的内容返回给函数的调用

​ 4.return 返回多个内容的时候还是元组

     关于返回值:

      如果return什么都不写或者干脆就没写,return返回的结果就是None

      如果return后面写了一个值,可以返回任意类型,则调用者可以接受一个结果

      如果return后面写了多个结果,则调用者可以接受一个tuple,调用者可以直接使用解构获取多个变量

lst = [1,2,3,4,5]
def func():
    for i in lst:
        print(i)
    lst.append(input(">>>"))
    return lst

print(func())

1.6 函数的参数

​ 参数,也就是函数括号里的内容 函数在调用的时候指定一个具体的变量的值 就是参数.写法如下:

def 函数名(参数):
    函数体 

如果我们再定函数的时候写了形参,在调用函数的时候没有传递值,调用的时候右边括号会发黄,所以我们必须要传递参数,参数要一一对应,不能多不能少.

1.6.1参数

1.形参(形式上的参数)(行数的定义中括号里的是形参)

    写在函数声明的位置的变量叫形参,形式上的一个完整.表示这个函数需要xxx

2.实参(实际存在的参数)(行数的调用括号里的是实参)

    在函数调用的时候给函数传递的值加实参,实际执行的时候给函数传递的信息.表示给函数xxx

  3.传参(将实参传递给形参的过程叫做传参)

    从调用函数的时候将值传递到定义函数的过程叫做传参

#函数定义
def mylen(s1):
    """计算s1的长度"""
    length = 0
    for i in s1:
        length = length+1
    return length

#函数调用
str_len = mylen("hello world")
print('str_len : %s'%str_len)

带参数的函数

​ 参数可以传递多个,多个参数之间用逗号分割。

def mymax(x,y):
    the_max = x if x > y else y
    return the_max

ma = mymax(10,20)
print(ma)

传递多个参数

4.位置参数(必须一一对应)

站在实参角度

​ 4.1 按照位置传参

按照位置传参

def mymax(x,y):
    #此时x=10,y=20
    the_max = x if x > y else y
    return the_max

mx = mymax(10,20)
print(mx)

​ 4.2 按照关键字传参

按照关键字传参

def mymax(x,y):
    #此时x = 20,y = 10
    print(x,y)
    the_max = x if x > y else y
    return the_max

mx = mymax(y = 10,x = 20)
print(mx)

​ 4.3 位置,关键字形式混合用

混合传参

def mymax(x,y):
    #此时x = 10,y = 20
    print(x,y)
    the_max = x if x > y else y
    return the_max

mx = mymax(10,y = 20)
print(mx)

​ 正确用法

    问题一:位置参数必须在关键字参数的前面

    问题二:对于一个形参只能赋值一次

综上: 在实参的角度来看. 分为三种:

1. 位置参数
2. 关键字参数
3. 混合参数, 位置参数必须在关键字参数前面

位置参数:
  位置参数,按照位置来赋值,到目前为止,我们编写的函数都是这种

优先级:位置 > 关键字

站在形参的角度

​ 位置参数必须传值

def mymax(x,y):
    #此时x = 10,y = 20
    print(x,y)
    the_max = x if x > y else y
    return the_max

#调用mymax不传递参数
mx = mymax()
print(mx)

#结果
TypeError: mymax() missing 2 required positional arguments: 'x' and 'y'

​ 默认参数

​ 在函数声明的时候, 就可以给出函数参数的默认值. 在调用的时候可以 给出具体的值, 也可以不给值, 使用默认值.

eg:一个班大部分学生都是男生. 这个时 候就可以给出⼀一个sex='男'的默认值.

def stu_info(name,sex = "male"):
    """打印学生信息函数,由于班中大部分学生都是男生,
        所以设置默认参数sex的默认值为'male'
    """
    print(name,sex)

stu_info('alex')
stu_info('Eva_J','female')

默认参数

注意:必须先声明在位置参数,才能声明关键字参数

参数陷阱:

def defult_param(a,l = []):
    l.append(a)
    print(l)

defult_param('alex')
defult_param('egon')

结果:
['alex']
['alex', 'egon']

综上:在形参的角度来看

  1. 位置参数
  2. 默认值参数(大多数传进来的参数都是一样的, 一般用默认参数

优先级:位置 > 默认

百万年薪python之路 -- 函数初始的更多相关文章

  1. 百万年薪python之路 -- 函数初始练习

    1.整理函数相关知识点 2.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者. def func(lst): lst = lst[1::2] return l ...

  2. 百万年薪python之路 -- 数据库初始

    一. 数据库初始 1. 为什么要有数据库? ​ 先来一个场景: ​ 假设现在你已经是某大型互联网公司的高级程序员,让你写一个火车票购票系统,来hold住十一期间全国的购票需求,你怎么写? 由于在同一时 ...

  3. 百万年薪python之路 -- 面向对象初始

    面向对象初始 1.1 面向过程编程vs函数式编程 函数编程较之面向过程编程最明显的两个特点: 1,减少代码的重用性. 2,增强代码的可读性. 1.2 函数式编程vs面向对象编程 面向对象编程:是一类相 ...

  4. 百万年薪python之路 -- 函数的动态参数

    1.函数的动态参数 1.1 动态接收位置参数 在参数位置用*表示接受任意参数 def eat(*args): print('我想吃',args) eat('蒸羊羔','蒸熊掌','蒸鹿尾儿','烧花鸭 ...

  5. 百万年薪python之路 -- 函数名的第一类对象及使用

    函数名是一个变量, 但它是一个特殊的变量, 与括号配合可以执行函数的变量 1.1.函数名的内存地址 def func(): print("呵呵") print(func) 结果: ...

  6. 百万年薪python之路 -- 函数的动态参数练习

    1.继续整理函数相关知识点. 2.写函数,接收n个数字,求这些参数数字的和.(动态传参) def func(*args,**kwargs): num_sum = 0 num_dic = [] num ...

  7. 百万年薪python之路 -- 生成器

    1.生成器 #本质就是迭代器 1.1 生成器的构建方式 在python中有三种方式来创建生成器: ​ 1.通过生成器函数 ​ 2.通过生成器推导式 ​ 3.python内置函数或者模块提供 1.2 生 ...

  8. 百万年薪python之路 -- 内置函数二 -- 最常用的内置函数

    1.内置函数 1.1 匿名函数 匿名函数,顾名思义就是没有名字的函数(其实是有名字的,就叫lambda),那么什么函数没有名字呢?这个就是我们以后面试或者工作中经常用匿名函数 lambda,也叫一句话 ...

  9. 百万年薪python之路 -- 内置函数练习

    1.整理今天笔记,课上代码最少敲3遍. 2.用列表推导式做下列小题 过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母 lst = [["a","b"],[ ...

随机推荐

  1. [Spark] 04 - HBase

    BHase基本知识 基本概念 自我介绍 HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”. ...

  2. java+selenium-3.9.1多线程 打开连接截取屏幕截图

    废话不多说上代码:(我是用的chrome举得例子哈) 第一步,需要chromedriver.exe 目的和调起chrome 浏览器打开连接,chromedriver.exe的版本与你的chrome版本 ...

  3. 【linux】【Fabric】Centos7搭建Fabric运行环境

    1.安装jdk1.8配置环境变量 参考:https://www.cnblogs.com/jxd283465/p/11541506.html 2.安装git yum -y install git 3.安 ...

  4. 【linux】【maven】maven及maven私服安装

    前言 系统环境:Centos7.jdk1.8 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的用户使用.当Maven需要下载构件的时候,它从私服请求,如 ...

  5. Java图片处理:ico格式转 PNG/JPG等格式

    一. 什么是ico图标? ico是一种图标格式,大量应用于网站,各个软件的logo或图标展示. 我们在进入某个网站或网页,它们上方标题左侧各自都带有logo图标. 这就是favicon.ico图标,它 ...

  6. RxSwift 中的调度器

    与 ReactiveCocoa 相比,Rx 的一大优势就是更丰富的并发模型.提到并发,就不得不提多线程.在 RxSwift 中,与线程对应的概念就是调度器,本文就调度器做些介绍,包括并发调度器.串行调 ...

  7. 【翻译】Docker Compose 与Docker Stack的不同

    翻译原文 Docker引擎在1.12 版本集成了Docker Swarm,  带来了一些新工具. 现在可以无需安装 Docker Compose, 就可以利用docker-compose.yml 文件 ...

  8. SpringBoot集成Shiro 实现动态加载权限

    一.前言 本文小编将基于 SpringBoot 集成 Shiro 实现动态uri权限,由前端vue在页面配置uri,Java后端动态刷新权限,不用重启项目,以及在页面分配给用户 角色 . 按钮 .ur ...

  9. 基于API和SQL的基本操作【DataFrame】

    写在前面: 当得到一个DataFrame对象之后,可以使用对象提供的各种API方法进行直接调用,进行数据的处理. // =====基于dataframe的API=======之后的就都是DataFra ...

  10. 性能优化:虚拟列表,如何渲染10万条数据的dom,页面同时不卡顿

    列表大概有2万条数据,又不让做成分页,如果页面直接渲染2万条数据,在一些低配电脑上可能会照成页面卡死,基于这个需求,我们来手写一个虚拟列表 思路 列表中固定只显示少量的数据,比如60条 在列表滚动的时 ...