函数
  叫 子过程或子程序 描叙的更为贴近实际应用场景
  这和数学中的函数实现上不同但语义上相识,如 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. Qt setMouseTracking使用

    Qt setMouseTracking使用(转载)   bool mouseTracking 这个属性保存的是窗口部件跟踪鼠标是否生效. 如果鼠标跟踪失效(默认),当鼠标被移动的时候只有在至少一个鼠标 ...

  2. e3mall商城的归纳总结7之solr搭建和应用

    敬给读者的话 本文主要应用的技术是solr技术的搭建和应用,本文小编尽量写的更详细一些,让读者在不考虑项目的情况下也能正常完成solr的搭建,说完搭建之后,再说明运行solrj在项目中如何应用solr ...

  3. e3mall商城的归纳总结6之redis

    一.说在前面的话 前面几节我们主要对该项目的后端进行了增删改查,但是所有的数据都是存放在数据库中,这样的话数据库的压力显而易见是很大的,因此本节学习nosql的缓存,也就是redis的使用,在使用之前 ...

  4. Java程序员博客系统推荐!我调研了100来个 Java 开源博客系统,发现这 5 个最好用!

    大家好!我是 Guide 哥,Java 后端开发.一个会一点前端,喜欢烹饪的自由少年. 最近想倒腾一下博客,看了很多现成的比较成熟的开源博客系统,自己也简单从下面几个维度总结对比了一下: star数量 ...

  5. Mysql宽字节注入 ---学习笔记

    转自:https://blog.csdn.net/niexinming/article/details/49109683 先补充一点背景:大 家都知道PHP在开启magic_quotes_gpc或者使 ...

  6. ETC1

    对纹理进行Alpha通道分离的好处 https://blog.csdn.net/u011926026/article/details/53982180 拆分贴图的Alpha通道 --对抗ETC1的原罪 ...

  7. markdown 语法总结(一)

    1.标题 代码 注:# 后面保持空格 # h1 ## h2 ### h3 #### h4 ##### h5 ###### h6 ####### h7 // 错误代码 ######## h8 // 错误 ...

  8. P1090 合并果子(哈弗曼树)

    题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...

  9. qdu-凑数题(01背包)

    Description 小Q手里有n(n<=1000) 个硬币,每枚硬币有一定的金额(200=>x>=1)他想知道,用这些硬币(每枚硬币只能用一次,但可能会有等面值的用两次) 能组成 ...

  10. linux的五种IO模型

    概念: 同步.异步.阻塞.非阻塞的概念 同步:所谓同步,发起一个功能调用的时候,在没有得到结果之前,该调用不返回,也就是必须一件事一件事的做,等前一件做完了,才能做下一件. 提交请求->等待服务 ...