函数部分

函数部分大概想分成两个部分来讲,第一部分是关于对函数参数的介绍,第二部分是局部变量全局变量和内置变量也就是变量作用域的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基础知识之函数的更多相关文章

  1. 自学Python四 爬虫基础知识储备

    首先,推荐两个关于python爬虫不错的博客:Python爬虫入门教程专栏   和 Python爬虫学习系列教程 .写的都非常不错,我学习到了很多东西!在此,我就我看到的学到的进行总结一下! 爬虫就是 ...

  2. Python开发(一):Python介绍与基础知识

    Python开发(一):Python介绍与基础知识 本次内容 一:Python介绍: 二:Python是一门什么语言 三:Python:安装 四:第一个程序 “Hello world” 五:Pytho ...

  3. Python进阶----计算机基础知识(操作系统多道技术),进程概念, 并发概念,并行概念,多进程实现

    Python进阶----计算机基础知识(操作系统多道技术),进程概念, 并发概念,并行概念,多进程实现 一丶进程基础知识 什么是程序: ​   程序就是一堆文件 什么是进程: ​   进程就是一个正在 ...

  4. Python第一章-基础知识

    第一章:基础知识 1.1 安装python.     直接官网下载最新的python然后默认安装就可以了,然后开始菜单里找到pyhton *.*.* Shell.exe运行python的交互shell ...

  5. 基于Python的Flask基础知识

    Flask简介 Flask 是一个使用 Python 编写的轻量级 Web 应用程序框架.Armin Ronacher带领一个名为Pocco的国际Python爱好者团队开发了Flask. 下面我们简单 ...

  6. Python音频处理基础知识,这不是轻轻松松~~~

    大家好鸭,我是小熊猫 咱今天来讲一讲音频处理的基础知识上才艺~~~ 1.声音的基础 2.python读取.wav音频 欢迎加入白嫖Q群:660193417### import wave import ...

  7. python这不是有手就行?——python音频处理基础知识

    大家应该都知道声音的基础吧? 啊不知道当我没说吧~~~ 1.声音的基础 2.python读取.wav音频 Python学习交流Q群:660193417#### import wave import s ...

  8. Python基础知识:函数

    1.定义函数和调用函数 #定义函数def def greet_user(username): '''简单的问候语''' print('Hello,%s!'%username) greet_user(' ...

  9. python第一课--基础知识

    python简介 Python是一种计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的 ...

  10. 【Python】【基础知识】【内置函数】【input的使用方法】

    原英文帮助文档: input([prompt]) If the prompt argument is present, it is written to standard output without ...

随机推荐

  1. Python模块导入详解

    定义 模块:用来从逻辑上组织Python代码(变量.函数.类.逻辑)去实现一个功能.本质就是.py结尾的Python文件. 包:用来从逻辑上组织模块的(可以放一堆模块在目录下).本质就是一个目录(必须 ...

  2. HCTF2018-admin[条件竞争]

    附上网上师傅的wp  学习链接: https://www.jianshu.com/p/f92311564ad0 按照师傅的wp复现一下: 源代码审计,去看路由里的login函数和change函数都在没 ...

  3. 录入规则文件名到CSV文件

    import os import sys import csv # 导出到csv文件 def export_to_csv(datas): with open('export.csv', 'w', ne ...

  4. python:创建文件

    #!/usr/bin/python# -*- coding:utf-8 -*- open('a.txt','w+')

  5. LaTeX 文字带边框

    1.使用framed宏包 \usepackage{framed} 可以使用verb|...|和verbatim环境而不使用cprotect宏包的cprotect命令 \begin{framed} \v ...

  6. Django教程(1)

    增加新的视图: 1. 在app/view.py下增加调用视图函数 def horizonG(request): return render(request, 'horizonG.html') 2. 在 ...

  7. ORA-01789: 查询块具有不正确的结果列数

    问题描述 ORA-01789: 查询块具有不正确的结果列数 问题原因 sql语句用union时的 两个语句查询的字段不一致,好像顺序也要保持一致才行

  8. 在github网站上更新fork的repo

    打开fork的repo. 点击Pull request, 这里会跳转到一个页面提示There isn’t anything to compare. 点击switching the base,将orig ...

  9. dubbo学习(一)认识

    部分图片和表述来自dubbo官网 dubbo 概述 背景 这是一个服务端架构发展的路径图 下面我们介绍后面两种,dubbo 正是处于RPC 范畴内的使用. 分布式服务架构 当垂直应用越来越多,应用之间 ...

  10. 10-Java-JSTL标签库的使用

    使用JSTL标签库使用 第一步:引入相关jar包到WEB-INF/lib/,JSTL标签库(standard.jar,jstl.jar) 第二步:在JSP文件中通过 taglib指令引入标签库,例如: ...