Day06-函数

函数

一、集合(set)

特点:不允许有重复元素,如果添加重复元素,则会自动过滤,可以进行交集、并集的运算。

本质:无序且无重复元素的数据结构

1 创建集合

s1 = set()  #空集合  不能是{},这是字典
s2 = {1,2,3,4}
print(s1)
print(set([30,40,50]))  #通过列表创建
print(set((11,22,33)))  #通过元组创建
print(set('hello'))     #通过字符串创建  
print(set({'name':'大宝','age':20}))   #通过字典创建,得到一个键的集合
​
#注意:重复元素在set中会被自动过滤

2 集合操作

#1 增加
#add添加不可变元素
s1.add(5)
# s1.add([6,7]) #不能添加列表,列表和字典都是不可哈希的
s1.add((6,7))  #可以添加元组元素,元组是可哈希的
print(s1)
​
#set.update(s) s必须是可迭代的对象:列表、元组、字符串、字典
#update会把列表、元组、字符串打碎添加到集合中
s1 = {1,2,3,4}
s1.update([5,6])
s1.update((7,8))
s1.update('hello')
s1.update({'1':10,'2':20})  #将字典的键添加到s1
print(s1)
​
#2 删除
#set.remove(elem)
set3 = {1,2,3,4,5,6}
set3.remove(4)  #直接删除指定元素
print(set3)
​
print(set3.pop()) #删除任意元素,并返回该元素的值
print(set3)
set3.discard(10) #删除的元素不存在,不会报错
#set3.remove(10) #如果元素不存在,则报错:KeyError
​
#3元素个数
print(len(set3))
​
#4 成员操作
print(2 in set3)  #True
​
#5 并、交、差集
s1 = {1,2,3,4,5}
s2 = {3,4,5,6,7}
print(s1 | s2)  #并
print(s1 & s2)  #交集
print(s1 - s2)  #差集

二、补充

2.1数据类型的转换

函数名函数值
int(x)将x转换为int类型
float(x)将x转换成浮点型
str(x)将x转换成字符串
bool(x)转换成bool类型 的True False
dict(x)将序列x转换成字典
list(x)将序列x转换成列表
set(x)将序列x转换成集合
tuple(x)将序列x转换成元组

###2.2布尔值

在python中,能够解释为假的值有:None、0、0.0、False、所有的空容器(空列表、空元组、空字典、空集合、空字符串),其它是真

2.3 zip函数

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

语法:zip(iterable1,iterable2, ...)

参数说明:iterable -- 一个或多个可迭代对象(字符串、列表、元祖、字典)

a = [1,2,3,4]
b = [2,3,4]
res = zip(a,b)
print(list(res))  #[(1, 2), (2, 3), (3, 4)]
# 可以使用for-in 遍历
for x,y in zip(a,b):print(x,y)

2.4 列表推导式

运用列表推导式,可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁。

#列表推导式语法:
[exp for iter_var in iterable] 
执行for-in循环时,通过iter_var遍历iterable每一项,exp表达式中可以直接使用iter_var,每遍历一项,产生一个新的列表元素。
#生成[0,1,4,9,16,25]
[x*x for x in range(6)]
​
#生成[0,4,16,36,64]
l2 = [x*x for x in range(9) if x % 2 ==0]
print(l2)
​
#可以使用双重循环
suit = ['♥','♦','♣','♠']
face = ['A','2','3','4','5','6','7','8','9','10','J','Q','K']
poke = [(x,y) for x in suit for y in face]
​
#字典推导式
#列表生成式可以使用两个变量,实现字典的键值交换
d = {"X":"A","Y":"B","Z":"C"}
list5 = {v:k for k,v in d.items()}
print(list5)
​
#集合推导式
print({x for x in range(10)})
​
#练习:
1.将一个列表中所有的字符串变成小写l = ["Hello","World","IBM","Apple"]
如果是这样的列表呢l =  ["Hello","World",10,"IBM","Apple"]

三、函数引入

前面我们写过九九乘法表,但如果我要七七乘法表或五五乘法表的话,你会看到三者代码极其类似,只是循环变量不同,那么如何做到代码重用,而不是简单拷贝黏贴修改呢,其实可是使用函数完成这一功能

def table(row,col,sep=3):for i in range(1, row + 1):for j in range(1, col + 1):if j <= i:print("%d*%d = %2d" % (i, j, i * j), end='%*s'%(sep,' '))print('')
#一次编码,到处运行
table(8,8)
table(5,5,8)

函数的优点:

  • 代码可复用

  • 代码可维护性高

  • 容易排错

  • 可读性好

  • 利于团队开发

1.函数定义

函数就是完成特定功能的代码块,本质上是对代码的封装。 语法格式

def 函数名([参数1],[参数2]....[参数n]):函数体
  • 函数名命名规则同变量名,要满足标识符命名规则

  • 不能和系统函数重名,否则系统函数无法使用

  • 函数定义分两部分函数头和函数体

  • 函数体,就是实现功能的代码段,以:开头,必须缩进

  • 函数名的命名风格:一般建议用下划线分隔的小写单词组成:say_hello

2 函数参数

2.1 实参和形参

  • 形参:就是函数定义时小括号里的变量

  • 实参:函数调用的时候,小括号里的表达式

  • 函数可以没有形参和实参

2.2 参数分类

  • 位置参数,要求实参顺序必须和形参顺序完全一致,由形参顺序决定实参顺序

    def say_hello(name,age,home):print('大家好,我是{},我今年{}岁了,我来自{}'.format(name,age,home))
    ​
    say_hello('王二妮',18,'湖北武汉') #实参个数、顺序必须和形参一致
  • 关键字参数,函数调用时,实参可以是键值对,键就是形参名字,这样的调用,实参不必关心形参的顺序。

    def say_hello(name,age,home):print('大家好,我是{},我今年{}岁了,我来自{}'.format(name,age,home))
    ​
    say_hello(name='王二傻',home='大连',age=20)  #三个关键字参数
    say_hello('大傻',home='美国',age=30)  #两个关键字参数
    sya_hello('二傻',24,home='何方')    #一个关键字参数
  • 默认值,如果形参在定义的时候给定一个值,那么函数在调用时就可以不传实参,可以简化调用

    • 默认值参数必须放到最右边

    • 如果传了实参,那么实参优先,不会使用默认值

    • 默认值只计算一次

    • 默认值必须是不可变对象

    def my_power(x,n=2):return (x) ** n
    my_power(3)
    my_power(4,0.5)def test(a=[]):a.append('end')print(a)
    test([1,2,3])
    test()   #['end']
    test()   #['end','end']
    
  • 可变参数,传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。

    #使用*接收任意数量的位置参数#注意:*的不定长参数被当做元组处理
    def demo(a,b,*args):print(a,b,args)demo(12,33,90)
    demo(1,2,3,4,5)
    a=(1,2,3)
    demo(*a)#使用**接收任意数量的关键字参数
    #注意:**的不定长参数被当做字典处理
    def demo1(a,**args):print(a,args)
    demo1(1,name='kk',age=3)
    b = {'a':20,'b':12,'c':32}
    demo(**b)
    

2.3 参数组合

  • 形参顺序须按照以下顺序:位置参数、默认值参数、*args,**kwargs

3 函数调用

  • 函数调用必须在函数定义之后

  • 函数调用必须能够正确传递实参

    def demo(a,b,c=0,*arg1,**arg2):print(a,b,c,arg1,arg2)
    demo(1,3,k=4)
    demo(1,2,3,4,5)
    demo(1,b=3,c=3,d=5)
    demo(*(1,2,3),**{'name':12})  #任何函数都可通过这种形式传递参数
    

4 返回值

可以通过return语句返回计算结果。语法: return 表达式

  • return的作用一个是终止函数的执行,所有执行了return后,其后的语句不会被执行

  • 如果没有return语句,则默认返回的是None

  • return还可以返回给调用者数值

  • return可以返回一个值,如果要返回多个值,那么返回的是一个元组

    def demo2():return 1
    def demo3():return 1,2,3
    print(demo2())
    print(demo3())  #(1,2,3)
    

5 文档字符串

函数文档字符串documentation string (docstring)是在函数开头,用来解释其接口的字符串。简而言之:帮助文档

  • 包含函数的基础信息

  • 包含函数的功能简介

  • 包含每个形参的类型,使用等信息

文档字符串书写规则:

  • 必须在函数的首行

  • 使用三引号注解的多行字符串(''' ''') 或(""" """)

  • 函数文档的第一行一般概述函数的主要功能,第二行空,第三行详细描述。

    def test():"""函数名:test功能:测试参数:无返回值:无"""print("函数输出成功")#使用__doc__属性查看文档字符串
    print(test.__doc__)
    

6.参数传递

python的参数传递是简单的值传递,当然这里的值是指变量的引用(地址),不是变量的值。不存在值传递和引用传递的区分。简而言之,python的参数传递可以称之为对象引用传递,对象可以分为:

  • 不可变对象:int、float、None、complex、bool、tuple、str,range

    • 在函数内部不可能修改函数外部的变量

  • 可变对象: dict、list

    • 可以在函数内部修改

7 空函数

借助于pass语句实现,函数体不完成任何功能,只有一个pass语句

def test():pass

8 匿名函数

不再使用def 函数名()这种形式定义函数,而是使用lambda来创建匿名函数

特点:

  • lambda只是一个表达式,函数体比def简单的多

  • lambda的函数体不再是代码块

  • lambda只有一行,增加运行效率

语法:

lambda [arg1,arg2....argn]:函数体
add = lambda a,b:a + b
print(add(3,5))

9.函数类型

函数也是一种类型,我们自定义的函数就是函数对象,函数名保存了函数对象的引用(地址)

def test():print('我是测试函数')print(test)  #函数名是变量,指向了函数对象
pf = test    #pf变量也指向了函数对象,所以也可以通过pf调用test函数
pf()

10.传入函数

一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数,也可以称之为传入函数。可以实现通用编程,排序等复杂功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在TextView中实时显示数据

//下面实时更新显示在textView中的数据handler new Handler();runnable new Runnable(){Overridepublic void run(){// TODO Auto-generated method pushupTextView.setText(Integer.toString(Number.pushup_number)); handler.postDelayed(this, 1000); }}; handle…

DuangDuangDuang!码云项目的 Readme.md 特殊技能

为什么80%的码农都做不了架构师&#xff1f;>>> 我们在 码云 上创建新项目的时候&#xff0c;常常会看到默认使用 README 文件初始化该项目&#xff08;如图1 所示&#xff09;&#xff0c;然后在新建项目的根目录下就会生成一个 README.md 文件&#xff08;如图2 …

java sunjce,无法初始化类javax.crypto.SunJCE_b

我已经开发了一个Javaservlet应用程序&#xff0c;并且在我的开发PC上&#xff0c;一切正常&#xff0c;包括按计划使用SFTP通过端口8443等上的HTTPS并以适当的SSL证书通过PDF复制PDF。但是&#xff0c;当我尝试在实时服务器上运行该应用程序时&#xff0c;会收到错误消息。jav…

GitHub添加SSH keys报错Key is invalid. It must begin with 'ssh-ed25519', 'ssh-rsa', 'ssh-dss', 'ecdsa-sha

GitHub添加SSH keys报错Key is invalid. It must begin with ‘ssh-ed25519’, ‘ssh-rsa’, ‘ssh-dss’, ecdsa-sha 在GitHub上Add SSH key的时候报错&#xff1a;Key is invalid. It must begin with ‘ssh-ed25519’, ‘ssh-rsa’, ‘ssh-dss’, ecdsa-sha。。。&#xff…

System.Diagnostics.Process 执行.EXE

分类&#xff1a; C#WINFORM 2009-04-05 21:09 459人阅读 评论(0) 收藏 举报 我们经常会遇到在Winform或是WPF中点击链接或按钮打开某个指定的网址, 或者是需要打开电脑中某个指定的硬盘分区及文件夹, 甚至是"控制面板"相关的东西, 那么如何做呢? 答案是使用Sys…

php 扩展 返回字符串,基于PHP7的PHP扩展开发之四(字符串的处理)

目的&#xff1a;熟悉字符串在PHP扩展里面如何处理要实现的PHP代码如下&#xff1a;1、当字符串不包含指定前缀字符串时&#xff0c;把前缀字符串和被检测字符合并返回。2、当字符串包含指定前缀字符串时&#xff0c;原样返回。 我们将使用PHP扩展的方式实现str_concat功能。fu…

对象之int介绍

#Auther Bob #--*--conding:utf-8 --*-- #创建两个int的对象&#xff0c;age1和age2age1 10 age2 int(1)#查看对象的类print(type(age1))# <class int>print(type(age2))# <class int> #bit_length表示一个十进制数最少需要占用多个二进制位print(age1.bit_lengt…

Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.

谷歌浏览器报错 版本 73.0.3683.103&#xff08;正式版本&#xff09; &#xff08;32 位&#xff09;报错内容如下Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.jquery.js:2 Cross-Origin Read Blocking (CORB) blocked cros…

OpenStack 之vmware机器迁移到openstack集群

原理 openstack本身是支持使用vmware格式的镜像的&#xff0c;但是是需要我们我们在/etc/nova/nova.conf的配置文件中指定该计算节点使用vmware的驱动 123456789101112# Driver to use for controlling virtualization. Options# include: libvirt.LibvirtDriver, xenapi.XenAP…

解决Django静态文件配置pycharm高光问题

就困扰了我半天的Django静态文件配置问题 更改了setting 文件后 文件参考问题总会高亮让然觉得又错误怪怪的 所以索性直接眼不见心不烦 具体操作如下图&#xff1a; 就这样就可以啦 大功告成&#xff01; 也顺便提一下静态文件配置问题&#xff1a; Django静态加载的设置…

Weblogic的管理服务器与受管服务器

weblogic管理服务器和受管服务器&#xff1a; 域包含一个称为“管理服务器”的特殊 WebLogic Server 实例&#xff0c;它是您配置和管理域中所有资源的中心点&#xff0c;一个域有仅只有一个管理服务器实例。 在生产环境中&#xff0c;应将 Web 应用程序、EJB 和其他资源部…

python神经网络可视化,python中的神经网络感受野可视化

这是我想出的解决方案。谢谢mprat的帮助。在我发现spectralcolormap最适合这种任务&#xff0c;而且我还添加了您可以指定的边框。在from matplotlib import pyplotimport numpy as npborder 2images_amount 300row_amount 10col_amount 30image_height 28image_width 28…

Qt 多媒体音频模拟按钮发音(音视频启动)

## 项目演示 平台:windows或者ubuntu 要求:平台需要支持音频播放功能 文件格式:.wav 可以使用剪映生成,音频部分,我这里是简短的音乐 # Qt 多媒体简介 Qt QSound是Qt框架中的一个类,用于播放音频文件。它可以在Qt应用程序中实现简单的音频播放功能,包括播放、暂停和…

ASP.NET MVC5 ModelBinder

什么是ModelBinding ASP.NET MVC中&#xff0c;所有的请求最终都会到达某个Controller中的某个Action并由该Action负责具体的处理和响应。为了能够正确处理请求&#xff0c;Action的参数&#xff08;如果有的话&#xff09;&#xff0c;必须在Action执行之前&#xff0c;根据相…

Day07-函数(2)

1.函数类型 函数也是一种类型&#xff0c;我们自定义的函数就是函数对象&#xff0c;函数名保存了函数对象的引用&#xff08;地址&#xff09; def test():print(我是测试函数) ​ print(test) #函数名是变量&#xff0c;指向了函数对象 pf test #pf变量也指向了函数对…

php在html里面的位置,关于script在html中的摆放位置解析

以前一直觉得script在html中的任何位置都可以&#xff0c;今天做一个需求的时候才更正了自己的错误思想啊--script的位置也不是随便放的。本文主要谈论关于script在html中的摆放位置。小编觉得挺不错的&#xff0c;现在就分享给大家&#xff0c;也给大家做个参考。希望能帮助到…

Protocol Buffer技术详解(C++实例)

原文&#xff1a;http://www.cnblogs.com/stephen-liu74/archive/2013/01/04/2842533.html 这篇Blog仍然是以Google的官方文档为主线&#xff0c;代码实例则完全取自于我们正在开发的一个Demo项目&#xff0c;通过前一段时间的尝试&#xff0c;感觉这种结合的方式比较有利于培训…

yaml 解决问题

yaml 是什么&#xff1f; 在 github 一些开源项目里经常可以看到 .travis.yml 文件&#xff0c;后来接触持续集成这个概念时发现很多文件都是 .yml 后缀的文件。我在 阮一峰-YAML 语言教程 里了解了它的作用以及基本写法&#xff0c;他的那篇文章描述的略微有点啰嗦&#xff0…

2016 7 25 链表

1 #include<stdio.h>2 #include<stdlib.h>3 /* 4 usingnamespacestd;5 6 structNode7 {8 int data;//数据域9 struct Node*next;//指针域10 };11 12 /*13 Create14 *函数功能&#xff1a;创建链表.15 *输入&#xff1a;各节点的data16 *返回值&#xff1a;指…

php数值操作,php数值计算num类简单操作示例

php数值计算num类简单操作示例,在线,计算器,小数,整数,程序设计php数值计算num类简单操作示例易采站长站&#xff0c;站长之家为您整理了php数值计算num类简单操作示例的相关内容。本文实例讲述了php数值计算num类简单操作。分享给大家供大家参考&#xff0c;具体如下&#xff…