深入理解python(四)python基础知识之函数
函数部分
函数部分大概想分成两个部分来讲,第一部分是关于对函数参数的介绍,第二部分是局部变量全局变量和内置变量也就是变量作用域的LGB原则
函数的参数
1.关于形参和实参的问题
第一点要注意的是python中形参和实参的问题、
以不可变对象为参数,不会修改不可变对象的值(形参和实参的原因)
但对于可变对象(例如列表字典等),会在原地修改对象的值
例:
>>> def immutableob(a):#在函数中修改不可变对象的值
... a+=
>>> b=
>>> immutableob(b)
>>> b
#对象的值并没有改变
所以一般需要改变不可变对象的时候,一般使用返回值来处理
但是对于可变对象,函数内部值的改变会影响到外部
例:
>>> def mutableob(a):
... a[]=
...
>>> b=[,,]
>>> mutableob(b)
>>> b
[, , ] #作为参数的不可变对象的值发生了改变
2.几个参数类型
a.默认值参数
调用函数时,设置一些有默认值的参数
例:
def power(x, n=):
s =
while(n > ):
n -=
s *= n
reutrn s power() #
power(, ) #
但是不建议默认值参数指向一个可变对象,很容易出现危险
这里给一个默认值对象指向空列表的例子
>>> def my_func(a=[]):
... a.append()
... print(a)
>>> my_func()
[]
>>> my_func()
[, ]
>>> my_func()
[, , ]
可以看到,这样做的结果是,默认值参数的值会随着函数运行的次数而不断改变
b.可变长参数
可变长度参数有两种形式:*parameter 和 **parameter
*parameter 用来接受多个实参并将其放在一个元组中
**parameter 用来接受字典形式的实参
>>> def my_func(*a): #*parameter
... for x in a:
... print(x)
...
>>> my_func(,,) >>> def my_func(**a): #**parameter
... print(a)
...
>>> my_func(a=,b=)
{'a': , 'b': }
d.参数的解包
列表解包时,保持列表项数与参数数一致
#解包--list,元组,集合
def connect(ip,port,username,password):
print(ip)
print(port)
print(username)
print(password) info_list=['192.168.1.1',,'zhaozhao','']
info_tuple=('192.168.1.1',,'zhaozhao','')
info_set={'192.168.1.1',,'zhaozhao',''} connect(*info_list)
connect(*info_tuple)
connect(*info_set)
字典解包时,使用两个**代表对值的解包,但需要参数名称和key的值一样:
dic={"name":"zhaozhao","password":""}
def dic_fun(name,password):
print(name)
print(password)
dic_fun(**dic)
zhaozhao
这里要注意一下函数解包和变长参数的区别
变长参数是在函数定义时作为形参在函数定义内的
而函数解包相当于把要传入的字典或者列表进行解包,然后作为实参传入函数
lambda表达式和几个常用函数
lambda表达式可以用来声明匿名函数(anonymous function),即没有函数名字的临时使用的小函数
只可以包含一个表达式,且该表达式的计算结果为函数的返回值,不允许包含其他复杂的语句,但在表达式中可以调用其他函数。
>>> x=lambda a,c:a+c
>>> x(,)
常见的使用情景时在map函数中调用
>>> a=[,,,]
>>> list(map(lambda c:c*c,a))
[, , , ]
内置函数reduce可以将一个接受两个参数的函数以累积的方式从左到右依次作用到一个序列或迭代器对象的所有元素上

注意一点,python3在使用reduce时要注意需要
from functools import reduce
>>> reduce(lambda x,y:x+y,[,,,]) >>>
之后是关于sort的东西:
首先是list.sort()和sorted()的区别
list.sort()是原地排序,而sorted()是非原地排序返回排完序的列表
>>> a=[,,,]
>>> a.sort()
>>> a
[, , , ]
>>> a=[,,,]
>>> b=sorted(a)
>>> b
[, , , ]
>>> a
[, , , ]
之后是python2和python3的区别:

先说说这几个参数:
reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
关于key,这里给个例子:
>>> a=[(,),(,),(,)]
>>> def mykey(a):
... return a[]
>>> a.sort(key=mykey)
>>> a
[(, ), (, ), (, )]
关于cmp函数,在python2中作为传入的比对函数来使用,默认函数就是comp(x,y),在python3中没有这个参数
Python 2.7. (v2.7.14:84471935ed, Sep , ::) [MSC v. bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> cmp(,) #注意这是在在python2环境下
-
>>> cmp(,)
所以在python2中我们可以任意修改比对规则,例:
#升序排列
>>>numbers = [,,,]
>>>numbers.sort(cmp = lambda x,y: x-y)
>>>numbers
[,,,] #降序排列
>>>numbers = [,,,]
>>>numbers.sort(cmp = lambda x,y: y-x)
>>>numbers
[,,,]
最后关于yeild的使用
这里先简述一下generator的概念
严格来讲,Python中“生成器”这一概念包括两种具体的语法实现:
生成器函数(generator function): 类似于用常规的 def 语句定义的函数,但是使用 yield 语句一次返回一个结果,并在每个结果之间挂起 / 继续执行的状态
生成器表达式(generator expression): 类似于列表解析式,但是它们返回一个迭代器,而不是返回一个结果列表
也可以简单理解为生成一个可迭代对象,,,
例如使用生成器表达式:
例
>>> for x in (i for i in range(,)):
... print(x)
...
这是生成器表达式,我们使用生成器函数做同样的事情
>>> def number(i):
... for k in range(i):
... yield k
...
>>> for x in number():
... print(x)
... 4
#我们来看看函数的返回类型
>>> type(number(5))
<class 'generator'>
深入理解python(四)python基础知识之函数的更多相关文章
- 自学Python四 爬虫基础知识储备
首先,推荐两个关于python爬虫不错的博客:Python爬虫入门教程专栏 和 Python爬虫学习系列教程 .写的都非常不错,我学习到了很多东西!在此,我就我看到的学到的进行总结一下! 爬虫就是 ...
- Python开发(一):Python介绍与基础知识
Python开发(一):Python介绍与基础知识 本次内容 一:Python介绍: 二:Python是一门什么语言 三:Python:安装 四:第一个程序 “Hello world” 五:Pytho ...
- Python进阶----计算机基础知识(操作系统多道技术),进程概念, 并发概念,并行概念,多进程实现
Python进阶----计算机基础知识(操作系统多道技术),进程概念, 并发概念,并行概念,多进程实现 一丶进程基础知识 什么是程序: 程序就是一堆文件 什么是进程: 进程就是一个正在 ...
- Python第一章-基础知识
第一章:基础知识 1.1 安装python. 直接官网下载最新的python然后默认安装就可以了,然后开始菜单里找到pyhton *.*.* Shell.exe运行python的交互shell ...
- 基于Python的Flask基础知识
Flask简介 Flask 是一个使用 Python 编写的轻量级 Web 应用程序框架.Armin Ronacher带领一个名为Pocco的国际Python爱好者团队开发了Flask. 下面我们简单 ...
- Python音频处理基础知识,这不是轻轻松松~~~
大家好鸭,我是小熊猫 咱今天来讲一讲音频处理的基础知识上才艺~~~ 1.声音的基础 2.python读取.wav音频 欢迎加入白嫖Q群:660193417### import wave import ...
- python这不是有手就行?——python音频处理基础知识
大家应该都知道声音的基础吧? 啊不知道当我没说吧~~~ 1.声音的基础 2.python读取.wav音频 Python学习交流Q群:660193417#### import wave import s ...
- Python基础知识:函数
1.定义函数和调用函数 #定义函数def def greet_user(username): '''简单的问候语''' print('Hello,%s!'%username) greet_user(' ...
- python第一课--基础知识
python简介 Python是一种计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的 ...
- 【Python】【基础知识】【内置函数】【input的使用方法】
原英文帮助文档: input([prompt]) If the prompt argument is present, it is written to standard output without ...
随机推荐
- 栈的简单应用之中缀表达式转后缀表达式(C语言实现逆波兰式)
一.前言 普通人在书写计算式时会选择中缀表达式,这样符合人脑的认知习惯.可计算机处理时后缀表达式才能使处理速度更快,其原因是利用堆栈结构减少计算机内存访问.同时它也是一个很好锻炼栈这个数据结构的应 ...
- CodeForces 1144D
原题https://vjudge.net/problem/CodeForces-1144D /*求序列就经过几次step变成同一个数, 其实能发现一个数经过step1或者step2变成相邻的数, 所以 ...
- 《深入理解Java虚拟机》读书笔记七
第八章 虚拟机字节码执行引擎 1.运行时栈帧结构 概述: 栈帧是用于支持虚拟机进行方法调用的和方法执行的数据结构,他是虚拟机运行时数据区中的虚拟机栈的栈元素,栈帧存储了方法的局部变量,操作数栈,动态连 ...
- 题解【洛谷P1967】[NOIP2013]货车运输
题面 题解 注意到有一些限重很低的边不会被走到. 于是考虑建一棵最大生成树,在生成树上寻找答案. 设\(f[i][j]\)表示\(i\)的\(2^j\)级祖先,\(w[i][j]\)表示\(i\)到\ ...
- C++-static作用(转)
C++中static的作用 C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用 ...
- 【转载】Java嵌入Pig编程
转自:https://wiki.apache.org/pig/EmbeddedPig Embedding Pig In Java Programs Sometimes you want more co ...
- 【新特性速递】F.doPostBack的说明文档
FineUIPro/Mvc/Core的下个版本(v6.1.0),我们对客户端JS函数 F.doPostBack 进行了增强,并增加说明文档. 如果你还没有查阅过FineUI的客户端文档,可以收藏下这个 ...
- c++/cli mixed codes for standard c++ and csharp
混合DotNet与Win32API来实现的Hidlibrary,c/c++可直接使用,c#可直接使用 异步IO,拔插事件订阅,数据读取事件订阅 工程目录结构 HidEvent.h #pragma on ...
- js基础之--变量 作用域和内存问题
基本类型:Undefind Null Boolean Number String 引用类型: 对象 在操作对象时,实际上实在操作对象的引用而不是实际的对象.为此,引用类型的值是按引用访问的. 从一个变 ...
- Vue中父组件向子组件echarts传值问题
原文链接:https://blog.csdn.net/Uookic/article/details/80638883?utm_source=copy 问题:当父组件传值给子组件echarts时,发现子 ...