大话Python函数底层逻辑
函数
叫 子过程或子程序 描叙的更为贴近实际应用场景
这和数学中的函数实现上不同但语义上相识,如 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函数底层逻辑的更多相关文章
- JS自运行函数的写法和MVVM框架数据驱动的底层逻辑
1.JS自运行函数的写法 ( function(){ console.log(111)} )( ) !function(){ console.log(111) }() ( function(){}() ...
- 第二章----python函数
第一节:调用函数 1.函数是什么? 函数是组织好的,可以重复利用的. 2.为什么要用到函数? 提高应用的模块性,提高重复利用率.指的是:多个文件中可能都要用到该函数,直接拿来调用就行,不用在重复写一个 ...
- python函数-------python2.7教程学习【廖雪峰版】(三)
任务: 看完函数这一章 已完成 2017年6月8日16:23:491.函数的作用:写较少的代码实现较多的功能,可以多次被调用.2.可见,借助抽象,我们才能不关心底层的具体计算过程,而直接在更高的 ...
- C++ 炼气期之基本结构语法中的底层逻辑
1. 前言 从语言的分类角度而言,C++是一种非常特殊的存在.属于高级语言范畴,但又具有低级语言的直接访问硬件的能力,这也成就了C++语言的另类性,因保留有其原始特性,其语法并不象其它高级语言一样易理 ...
- Python函数讲解
Python函数
- Python函数参数默认值的陷阱和原理深究"
本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的 本博客已经迁移至: http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文 ...
- Python开发【第四章】:Python函数剖析
一.Python函数剖析 1.函数的调用顺序 #!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian #函数错误的调用方式 def fun ...
- Python入门笔记(18):Python函数(1):基础部分
一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...
- Day03 - Python 函数
1. 函数简介 函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.Python提供了许多内建函数,比如print():也可以自己创建函数,这 ...
随机推荐
- Qt QString字符串分割、截取
在做项目中不可避免的会使用到一串字符串中的一段字符,因此常常需要截取字符串. 有两种方式可以解决这个问题: 方法一:QString分割字符串: QString date=dateEdit.toStri ...
- Spring_mybatis结合之1.1
Spring和mybatis结合,Spring管理容器,连接数据库等,mybatis负责管理sql语句,sql的入参和出参等 三种方法: 1.原始dao开发(不怎么用,好奇的宝宝可以自己搜搜.是dao ...
- mq本机上能用,其他机子上连上不mq
有一次遇到了记录下.原因是suse11重启后会自动开防火墙. 关了防火墙. rcSuSEfirewall2 stopShutting down the Firewall done
- 【Go语言入门系列】(八)Go语言是不是面向对象语言?
[Go语言入门系列]前面的文章: [Go语言入门系列](五)指针和结构体的使用 [Go语言入门系列](六)再探函数 [Go语言入门系列](七)如何使用Go的方法? 1. Go是面向对象的语言吗? 在[ ...
- unity3d插入android有米广告
有米官网:http://www.youmi.net/register?r=MTI0MDg= 国内的广告,我觉得万普和有米还不错,我也只试了这两个,其他的都是看评价的,呵呵~~~首先我们去有米官网注册一 ...
- Unity添加自定义拓展方法
Shepherdog|2014-04-08 10:50|16151次浏览|Unity(373)0 通常你会发现你不能修改正在使用的那些类,无论它是基础的数据类型还是已有框架的一部分,它提供的方法让你困 ...
- laravel5学习并搭建网站【更新至2020-09-03】
之前一直不清楚 php artisan 要如何使用,有朋友推荐使用phpstorm可以进行命令行执行, 现在发现其实如果真的不喜欢phpstorm的加载缓慢,可以试试计算机原有的命令行 记住需要跳转到 ...
- Ubuntu更换国内源--解决终端下载速度慢的问题
目前我已知的更改国内源的方法基本上就两种,第一种,把/etc/apt/sources.list文件里的源更换一下,改成阿里云或者其它源.第二种,更换在设置中software&updates(软 ...
- odoo10中的邮件提醒
odoo10中邮件提醒配置如下: 1.配置出向邮件服务器 打开开发者模式,设置-->技术-->email-->出向邮件服务器 设置如下: 如果配置成功,点击’测试连接‘,会出现如下弹 ...
- Charles抓包工具的用途及应用
Charles抓包工具的用途: 排查问题,测试异常情况 注意:Charles不能直接抓https请求的包,需要用https://www.jianshu.com/p/ec0a38d9a8cf这个方法去配 ...