函数
  叫 子过程或子程序 描叙的更为贴近实际应用场景
  这和数学中的函数实现上不同但语义上相识,如 f(x) = expressiom, 给定一个确定的输入必然返回一个确定的输出
  数学中函数的关系是通过代数方程确定的,计算机中的函数关系通过 表达式语句确定的,计算机可以完成数学中函数的
  表达,并且远比数学中的函数要强大,数学中完成的仅仅是计算问题,计算机不仅仅完成计算还能同时自动完成相关联的
  运算与许多系统级别的工作

在学习函数之前,我们理解这个场景,比如你在画画,你需要什么?一支画笔和一张白纸就足够了,类比
计算机程序,你需要一个空文本文件和往空文本文件中写入程序,文本编辑器就是那支画笔,空白文件就是那张白纸
画画中,我们要熟知几种图形与线条,在程序中我们要熟知函数、类、变量、循环分支,这些都是构成程序的基本构件

函数定义

def ...(param, ...):
...
return expression, ...

  1. 关键字def引入一个函数定义,后面跟函数名称和函数的参数列表,然后最后以:作为结尾,下一行缩进表示函数体
  2. 定义的语义是创建了一个东西然后给予这个东西一个名字,然后后面某个时候可以通过名字来引用这个东西,要想用
    某个东西,就需要创建这个东西并给他一个名字
  3. 调用函数 ...(param, ...),这个过程又被称为执行函数,函数调用和函数执行时一个意思,要真有个区别
    函数调用是传递实际参数给函数,函数执行时执行函数体
  4. return 语句从函数中返回结果值,也就是函数的输出,可以时一个值,也可以时多个值,如果没有return语句则函数返回 None

def compare(one, two):
"""比较两个字符串,忽略大小写 如果一样则返回True, 否则返回False"""
res = one.lower() == two.lower()
return res str_one = "123XXX"
str_two = "123xxx"
# 比较两个字符串是否一致
res = compare(str_one, str_two)
print(res)

形参 和 实参

形参
  函数定义时候使用,只存在名称,没有具体的值,但可以在函数体内参与运算,很特殊,类似数学中的代数运算

实参
  函数调用时候使用,需要传递具体的值给函数定义的形参

函数调用过程传递参数的几种方式
  1. 位置参数,通过实参索引位置与形参索引位置依次赋值,等价于多重赋值
  2. 关键字参数,通过形参名称指定实参值的形式
  3. 解包序列提供位置参数,解包字典提供关键字参数

函数定义形参的几种形式
  # 形参的定义控制函数调用时候参数的传递方式
  1. 必传参数
  2. 默认参数,在函数定义过程中计算的,只会执行一次,这对形参默认值时时可变类型时候显得重要
  3. 可变参数(又叫收集参数、非固定参数)
  4. 仅限位置参数、仅限关键字参数、位置或关键字参数

def beg_sum(one, two, *num, **kwargs):
"""对两数求和,如果、num有则加上num中数"""
res = one + two
if not num:
return res
res += sum(num)
# 输出kwars参数
print(kwargs)
return res # 通过位置参数传递参数
res = beg_sum(1, 3, 77, 99, 99)
print(res) # 通过关键字参数传递参数
res = beg_sum(one=1, two=2, three=4)
print(res)

  

细心观察函数,你会发现,函数就是一个架子(框架),定义了输入,也定义了输出,至于中间的函数逻辑需要根据
具体的业务场景写语句逻辑

函数的语法糖形式又称为匿名函数
  # lambda 表达式,返回的时函数对象,主要用于一些内置的函数,如 map reduce filter sort
  # 应用于对可迭代对象中元素的简单处理
  # lambda 表达式只限于单行表达式
  # lambda 函数并特殊,只是普通def函数的简写,一种语法上的便捷,就好像吃了糖一样,甜甜的,所有叫做语法糖

nums = [10, 2, 3, 4, 6, 7, 8]
# 过滤掉 小于等于3的
want_nums = filter(lambda x: x > 3, nums)
print(list(want_nums))

 

函数标注
  # 参数和返回值的元信息,类似静态语言的参数的类型与返回值类型,但不同的是Python的标注信息仅仅是提示,不做
  参数类型检查,保存在函数元信息的 __annotations__以字典形式存放

def compare(one: str, two: str) -> int:
"""比较两个字符串,忽略大小写 如果一样则返回True, 否则返回False"""
res = one.lower() == two.lower()
return res str_one = "123XXX"
str_two = "123xxx"
# 比较两个字符串是否一致
res = compare(str_one, str_two)
print(res)
# 打印函数元信息,函数标注
print(compare.__annotations__)

  

所有名称遵守同样的规范
  # [a-zA-Z][a-zA-Z0-9]*
  # 基本上都是英文单词和英文单词的缩写或简写
  # 不能是关键字或内置函数名称

声明 = 定义 = 创建

元数据 任何数据都有元数据
  对数据的特征描叙,又叫元信息
  例如数字 1 其元数据:
    a. int类型
    b. 支持数值运算 + - * / // %
    c. 逻辑值为真
    ... 具有意义的特征信息

  小明 元数据
    身高
    体重
    年龄
    学历
    ...

大话Python函数底层逻辑的更多相关文章

  1. JS自运行函数的写法和MVVM框架数据驱动的底层逻辑

    1.JS自运行函数的写法 ( function(){ console.log(111)} )( ) !function(){ console.log(111) }() ( function(){}() ...

  2. 第二章----python函数

    第一节:调用函数 1.函数是什么? 函数是组织好的,可以重复利用的. 2.为什么要用到函数? 提高应用的模块性,提高重复利用率.指的是:多个文件中可能都要用到该函数,直接拿来调用就行,不用在重复写一个 ...

  3. python函数-------python2.7教程学习【廖雪峰版】(三)

    任务: 看完函数这一章    已完成 2017年6月8日16:23:491.函数的作用:写较少的代码实现较多的功能,可以多次被调用.2.可见,借助抽象,我们才能不关心底层的具体计算过程,而直接在更高的 ...

  4. C++ 炼气期之基本结构语法中的底层逻辑

    1. 前言 从语言的分类角度而言,C++是一种非常特殊的存在.属于高级语言范畴,但又具有低级语言的直接访问硬件的能力,这也成就了C++语言的另类性,因保留有其原始特性,其语法并不象其它高级语言一样易理 ...

  5. Python函数讲解

    Python函数

  6. Python函数参数默认值的陷阱和原理深究"

    本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的 本博客已经迁移至: http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文 ...

  7. Python开发【第四章】:Python函数剖析

    一.Python函数剖析 1.函数的调用顺序 #!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian #函数错误的调用方式 def fun ...

  8. Python入门笔记(18):Python函数(1):基础部分

    一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...

  9. Day03 - Python 函数

    1. 函数简介 函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.Python提供了许多内建函数,比如print():也可以自己创建函数,这 ...

随机推荐

  1. 重温Java Web的技术细节

    目录 一.背景 二.请求与响应 2.1.Http请求 2.2.Http响应 三.ServletConfig 3.1 测试ServletConfig参数 四.ServletContext 4.1 测试S ...

  2. go语言之文件操作

    一: 相关的API 1func Create(name string) (file *File, err Error) 根据提供的文件名创建新的文件,返回一个文件对象,默认权限是0666 2 func ...

  3. 2020重新出发,MySql基础,MySql字符集

    目录 MySQL字符集和校对规则详解 MySQL字符集的转换过程 MySQL查看字符集和校对规则 MySQL设置默认字符集和校对规则 服务器字符集和校对规则 数据库字符集和校对规则 表字符集和校对规则 ...

  4. 30年技术积累,技术流RTC如何成为视频直播领域的黑马?

    摘要:视频业务链的背后,本质是一张视频处理和分发网络.5G+云+AI时代下,实时音视频必然会步入到一个全新的发展期. 2020年这场肆虐全球的新冠疫情让很多企业重新审视自己对数字化的认识,正如 “大潮 ...

  5. ES5和ES6的继承对比

    ES5的继承实现,这里以最佳实践:寄生组合式继承方式来实现.(为什么是最佳实践,前面有随笔讲过了,可以参考) function Super(name) { this.name = name; } Su ...

  6. 挂载磁盘不成功显示mount: /mnt: wrong fs type, bad option, bad superblock..............

    [23:25:32 root@8 ~]#mount /dev/sdb2 /mntmount: /mnt: wrong fs type, bad option, bad superblock on /d ...

  7. css学习入门-第一个css程序

    1.css的优势: --内容与表现分离 --网页结构统一,可以实现复用 --样式丰富 2.css的3种导入方式 2.1行内样式 <h1 style="color: red"& ...

  8. Redis Linux 安装部署

    Redis部署文档   Redis部署文档 准备软件: 开始部署: 解压tar包[root@localhost redis]# tar -zxvf redis-3.2.8.tar.gz 进入Redis ...

  9. 你会Spring Cloud吗?

    如果有人问你这句话,你不要急着回答,因为答语和问者的关系莫大. 如果问你的是个老板或管理者,那么他多半不了解这项技术,很有可能只是知道这个技术名词而已,你知道的一定比他们深,你大可夸夸其谈的.在口若悬 ...

  10. leetcode刷题-62不同路径

    题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 问总 ...