python函数学习1

函数1

1)定义:

def 函数名(参数列表)函数体

(2)参数传递:

  在python中,一切都是对象,类型也属于对象,变量是没有类型的。

  a = [1,2,3]

  a = "helloworld"

以上代码中,[1,2,3]是list类型,"helloworld"是string类型,而变量a是没有类型的,它仅仅是一个对象的引用(一个指针),可以是指向list类型对象,也可以指向string类型对象。 

  可更改(mutable)和不可更改(immutable)对象:

 

在python中,string,tuples,numbers是不可更改对象,而list,dictionary等是可修改对象。

①不可变类型:变量赋值a = 5后再赋值a = 10,这里实际是新生成一个int值对象10,再让a指向它,而5被丢弃,不是改变了a的值,相当于新生成了a.

②可变类型:变量赋值list= [1,2,3,4]后再赋值list[2] = 5,则是将列表list的第三个元素值更改,本身没有动,只是内部的一部分值被修改了。 

  python函数的参数传递:

①不可变类型:类似于(值传递),如 整数(number)、字符串(string)、元组(tuple)。如fun(a),传递的只是a的值,没有影响a对象本身。

        比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

 1 def change(a, b):
 2  """传递不可变对象,交换两个数的值"""
 3      c = a
 4      a = b
 5      b = c
 6 
 7 x = 2
 8 y = 3
 9 
10 change(x, y)
11 
12 print(x, y)

输出结果:

2 3

可以发现,将x,y的值传入change函数,进行交换后,输出x,y的值还是原来的值,这就是不可变类型传递。

 

②可变类型: 类似于(引用传递),如 列表(list),字典(dict)。如 fun(list),则是将 list 真正的传过去,修改后fun外部的list也会受影响。

1 def alter_list(list):
2     """传递可变对象,修改列表的值"""
3     list[0] = 3
4 
5 list1 = [1, 2, 3, 4, 5]
6     alter_list(list1)
7     print(list1)

输出结果:

[3, 2, 3, 4, 5]

可以发现,list1中的值发生了改变,同样的写法,上面的例子中的值没有改变,而下面的值却改变,这就是因为不可变类型和可变类型的参数传递。

注意:python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。

(3)参数:

  必须参数,位置参数,关键字参数,默认参数,不定长参数。

①必须参数: 调用函数时必须传入一个参数。

1     def func(a):
2         print(a)
3         
4     func()      # 没有参数会报错

 

②位置参数:在传递参数时必须与形参的顺序对应。

1     def func(a, b):
2         print('a=%s'%a)
3         print('b=%s'%b)
4 
5     func(2, 3)
6     func(3, 2)

 

③关键字参数:使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

1 def func(a, b):
2   print('a=%s'%a)
3   print('b=%s'%b)
4 
5 func(a=2, b=3)
6 func(b=3, a=2)

 

④默认参数:调用函数时,如果没有传递参数,则会使用默认参数。

1     def func(a, b=3):
2         print('a=%s'%a)
3         print('b=%s'%b)
4 
5     func(2)

 

⑤不定长参数: def 函数名(形参1,*形参2)       加了星号*的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。

       def 函数名(形参1,**形参2) 加了两个星号**的参数会以字典的形式导入。

 1 def func1(a, *b):
 2   print(a)
 3   print(b)
 4 
 5 func1(3, 4, 5, 'a', [1, 2, 3])
 6 
 7 def func2(a, **b):
 8   print(a)
 9   print(b)
10 
11 func2(3, c=4, d=5)  # 因为**要以字典的形式存储,而字典需要key值和value值,所以传参的时候要用这种方式

输出结果:

3
(4, 5, 'a', [1, 2, 3])
3
{'c': 4, 'd': 5}

 

  

 

转载于:https://www.cnblogs.com/zuoxide/p/10534307.html

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

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

相关文章

kafka应用于区块链_Apache Kafka的区块链实验

kafka应用于区块链by Luc Russell卢克罗素(Luc Russell) Apache Kafka的区块链实验 (A blockchain experiment with Apache Kafka) Blockchain technology and Apache Kafka share characteristics which suggest a natural affinity. For instance, both share the concept o…

pythonfor循环100次_以写代学: python for循环 range函数 xrange函数

脚本一: #!/usr/bin/env python # coding: utf8 sum100 0 for i in range(101): sum100 i #(1)range是一个可以取值的函数,上边这个取的是0-100,并不包含101 #(2)也可以指定,比如r…

iis下php 500错误

很不想用iis,然而客户不想增加机器,只好按客户的意思了。可是没想到发送短信以在本地 机器上是好的,在iis下直接500。   一开始以为是防火墙问题,后来检查了一下没有,再后来换了一个短信接口,就莫名其妙好…

linux mv 递归拷贝,奇技淫巧 - 给Linux中的cp和mv命令中添加进度条的高级拷贝

GNU cp和GNU mv命令用于在GNU/Linux操作系统中复制和移动文件和目录。这两个命令缺少的一个特性是它们不显示任何进度条。如果复制一个大文件或目录,您就不知道完成复制过程需要多长时间,也不知道复制的数据所占的百分比。还有您将看不到当前正在复制哪个…

webgl 着色器_如何在WebAssembly中使用WebGL着色器

webgl 着色器by Dan Ruta通过Dan Ruta 在WebAssembly中使用WebGL着色器 (Using WebGL shaders in WebAssembly) WebAssembly is blazing fast for number crunching, game engines, and many other things, but nothing can quite compare to the extreme parallelization of …

【洛谷P1966】火柴排队

两列排序后将编号一一对应 归并排序求逆序对 &#xff08;每一次交换就去掉一个逆序对&#xff09; 1 #include<cstdio>2 #include<cstring>3 #include<algorithm>4 #define ll long long5 using namespace std;6 const int N100100;7 const ll P99999997;8 …

python字符串补空格输出_Python去除空格,Python中常见字符串去除空格的方法总结...

今天小编就为大家分享一篇关于Python去除字符串前后空格的几种方法&#xff0c;小编觉得内容挺不错的&#xff0c;现在分享给大家&#xff0c;具有很好的参考价值&#xff0c;需要的朋友一起跟随小编来看看吧&#xff1a; Python去除空格方法一&#xff1a; strip()方法&#x…

Alan Walker MV 合辑01 by defender

Alan Walker MV合辑 出来啦&#xff01; 百度网盘下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/10WSool70XBe_8tJOae8V-w 提取码&#xff1a;uckq 地址查看Microsoft Onedrive Download Address:  BE DELETED Google Drive Download Address&#xff1a; …

scanf函数具体解释与缓冲区

1.基本信息 函数原型&#xff1a; int scanf( char *format, args, ...); 函数返回值&#xff1a; 读入并赋给args的数据个数。遇到文件结束返回EOF&#xff0c;出错返回0。 函数功能&#xff1a; scanf函数是格式化输入函数&#xff0c;它从标准输入设备(键盘)读取输入的信息。…

linux中win文件转为unix,如何将文本文件从Windows转换为Unix

从Unix转换到Windows时&#xff0c;我得到正确的输出;但是&#xff0c;从Windows到Unix时&#xff0c;我得到了一些奇怪的输出。我认为我必须允许的是删除回车\ r。虽然这不起作用。当我运行代码后打开文本文件时&#xff0c;我得到了一些奇怪的结果&#xff0c;第一行是正确的…

程序员伪造一年工作经验_试火—如何伪造程序员

程序员伪造一年工作经验2017年9月6日 (6 September 2017) Sweat is running down my face. I’m staring down a blank sublime text document. What on earth am I doing? My hands are resting above the keyboard of my MacBook pro.汗水顺着我的脸。 我盯着一个空白的崇高…

在unity中设置多种怪物数据_Unity可编程渲染管线(SRP)系列(三)——光照(单通道 正向渲染)...

本文重点:1、漫反射着色2、支持方向光、点光源和聚光灯3、每帧允许16个可见光源4、每个对象最多计算四个像素光和四个顶点光这是涵盖Unity可编写脚本的渲染管线的教程系列的第三部分。这次&#xff0c;我们将通过一个Drawcall为每个对象最多着色8个灯光来增加对漫反射光照的支持…

Java内部类的定义和使用

为什么要用到内部类&#xff1a; 在java开发学习中我们经常会碰到内部类。内部类又有很多的优势&#xff1a;首先举一个简单的例子&#xff0c;如果你想实现一个接口&#xff0c;但是这个接口中的一个方法和你构想的这个类中的一个方法名称参数相同&#xff0c;你应该怎么办&am…

蛋清打发奶油状

在做蛋糕、冰淇凌、面包之类的时候往往都需要奶油状蛋清&#xff0c;让蛋糕、面包更蓬松&#xff0c;冰激凌也可以使用其当做奶油来用。用料 鸡蛋4个 根据用量选择盐(只做冰激凌用奶油放)5g(根据蛋量)白醋(可以不放&#xff0c;根据喜好)5g(根据蛋量)白砂糖40g(分三次放)根据…

react构建_您应该了解的有关React的一切:开始构建所需的基础知识

react构建by Scott Domes由斯科特多姆斯(Scott Domes) 您应该了解的有关React的一切&#xff1a;开始构建所需的基础知识 (Everything You Should Know About React: The Basics You Need to Start Building) Are you curious about React and haven’t had the chance to lea…

荣新linux培训,51CTO博客-专业IT技术博客创作平台-技术成就梦想

切换用户 su - root文件夹管理 mkdir(新建文件夹) rmdir(删除空目录)文件管理 touch(新建文件) rm(删除文件)rm -rf(删除文件夹) cat(查询文件)文件文件夹 mv(剪切文件) cp(复制文件)默认拷贝文件&#xff0c;cp -r 就可以拷贝文件夹啦批量建文件 touch /root/tes…

Educational Codeforces Round 33 (Rated for Div. 2) E. Counting Arrays

题目链接 题意&#xff1a;给你两个数x,yx,yx,y,让你构造一些长为yyy的数列&#xff0c;让这个数列的累乘为xxx&#xff0c;输出方案数。 思路:考虑对xxx进行质因数分解&#xff0c;设某个质因子PiP_iPi​的的幂为kkk,则这个质因子的贡献就相当于把kkk个PiP_iPi​放到yyy个盒子…

《面向对象分析与设计》一第2章 什么是面向对象分析

第2章 什么是面向对象分析 面向对象分析&#xff08;ObjectOriented Analysis&#xff0c;OOA&#xff09;&#xff0c;就是运用面向对象方法进行系统分析。它是软件生命周期的一个阶段&#xff0c;具有一般分析方法所共同具有的内容、目标及策略。但是OOA强调运用面向对象方…

hql可以使用distinct吗_输送食品可以使用白色PVC输送带吗?

食品&#xff0c;是给人们吃到肚子里的&#xff0c;因此不管在加工环节、制造环节还是其他环节&#xff0c;都需要做好食品的安全问题。根据不同的食品&#xff0c;其制造的环境也不同&#xff0c;所使用到的食品输送带的材质也是不一样的&#xff0c;这些是需要根据输送的食品…

htc one m7 linux驱动,HTC One M7官方RUU固件包(可救砖)

在网上找了找关于HTC One M7 (801e)的官方ruu固件包还不多&#xff0c;找了一些&#xff0c;不过有些不能下载&#xff0c;在这里整理了几款可以下载的官方ruu包&#xff0c;这些包都是官方原版的&#xff0c;都是支持线刷的&#xff0c;大家可以下载下来备用了&#xff0c;也可…