Python中的函数及变量

张开发
2026/4/13 16:42:24 15 分钟阅读

分享文章

Python中的函数及变量
1.定义函数是组织好的可重复使用的用来实现单一或相关联功能的代码段。函数能提高应用的模块性和代码的重复利用率Python提供了很多内置函数比如prtint但是你也可以自己创建函数这种叫做用户自定义函数。2.函数的定义可以根据自己的需求定义一个想要功能的函数具有以下规则1函数代码块由def关键词开头后接函数标识符名称和圆括号2任何传入参数和自变量必须放在圆括号中间圆括号之间可以用于定义参数3函数的第一行语句可以选择性地使用文档字符串---用于存放函数说明4函数内容以冒号开始并且缩进5return[表达式]结束函数选择性地返回给一个值调用方不带表达式的return相当于返回None语法def functionname(parameters): 函数_文档字符串 function_suite return[expression]在默认情况下参数值和参数名称是按函数声明中定义的顺序来匹配起来的。举个例子def printme(str): 打印传入的字符串到标准显示设备上 print(str) return上面是一个标准的Python函数它将一个字符串作为传入参数再打印到标准显示设备上3.函数的调用定义了一个函数只是给了函数一个名称指定了函数里面包含的参数和代码块结构这个函数的基本结构完成以后你可以通过另外一个函数调用执行也可以直接从Python提示符执行下面的例子调用了printme函数代码def printme(str): 打印传入的字符串到标准显示设备上 print(str) return #调用函数 printme(我要调用用户自定义函数) printme(再次调用同一函数)结果以上内容起始很直观的看出来是怎么调用的当然这只是个简单的例子如果在实际的使用中当然会根据具体情况而具备不同的复杂性但是除了练习在实际情况中不会有这么简单的函数定义和调用4.函数中参数的传递在Python中类型属于对象变量是没有类型的a[1,2,3]aRunoob在上面这两行代码中[1,2,3]是list类型“Runoob”是String类型而变量a是没有类型它仅仅是一个对象的引用一个指针可以是List类型对象也可以指向String类型对象5.可更改mutable与不可更改immutable对象在Python中stringstuples与numbers是不可更改对象而listdict等则是可以修改的对象1不可变类型变量赋值a5后再赋值10这里实际是新生成一个int值对象10再让a指向它而5被丢弃不是改变a的值相当于新生成了a2可变类型变量赋值la[1,2,3,4]后再赋值la[2]5这个操作是将la中的第三个元素值更改为5la本身没有变只是其中的某个值被修改了3Python函数的参数传递①不可变类型类似C的值传递如整数、字符串、元组。如funa传递的只是a的值没有影响a对象本身比如在funa内部修改a的值只是修改另一个复制的对象不会影响a本身②可变类型类似C中的引用传递如列表字典。如funla则是将la真正的值传过去修改后fun外部的la也会受到影响Python中一切都是对象严格意义我们不能说值传递还是引用传递我们应该说传不可变对象和传可变对象举例1Python传不可变对象实例这上面这个例子中有int对象2指向它的变量是b在传递给ChangeInt函数时按传值的方式赋值了变量ba和b都指向了同一个int对象在a10时则新生成一个int值对象10并让a指向它这里逐行解释第一行定义了一个函数参数是a是一个局部变量第二行在函数内部将a重新赋值为10注意整数是不可变对象这里的赋值只是让局部变量a指向新的整数对象10并不会影响外部的变量第三行创建一个整数对象2变量b指向它第四行调用函数将b的值传递给参数a此时a和b都指向同一个整数对象2进入函数后执行a10a改为指向10但是b仍然指向2第五行输出b的值仍然是2总结来说就是Python中的整数是不可变对象函数内部参数的重新赋值不会改变外部变量的值如果希望函数修改外部变量可以使用返回值return a并重新赋值给b或者使用可变对象如列表、字典并在内部修改其内容举例2传可变对象实例代码def changeme(mylist): 修改传入的列表 mylist.append([1,2,3,4]) print(函数内取值,mylist) return #调用changeme函数 mylist[10,20,30] changeme(mylist) print(函数外取值,mylist)结果上面的例子中传入函数的和在末尾添加新内容的对象用的是同一个引用故输出结果是相同的6.参数以下是调用函数时可使用的正式参数类型·必备参数·关键字参数·默认参数·不定长参数1必备参数必备参数必须以正确的顺序传入函数调用时的数量必须和声明时候的一样调用printm函数你必须传入一个参数不然会出现语法错误举例说明以上内容在运行的时候输出错误是因为在调用pritnme函数的时候没有传入任何的参数所以运行出现报错“运行参数缺失”故障2关键字参数关键字参数和函数调用关系紧密函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明不一致因为Python解释器能够用参数名匹配参数值以下实例在函数printme调用时使用参数名上述代码输出如上结果再举个例子能将关键字参数顺序不重要展示的更清楚;代码def printinfo(name,age): 打印任何传入的字符串 print( Name: ,name) print( Age: ,age) return #调用printinfo函数 printinfo( age50,namemiki)结果上述结果说明关键字的顺序并不重要但是对应的关键字的数量要和声明时的一致3默认参数调用函数的时候默认参数的值如果没有传入则被认为是默认值下面举个例子会打印默认的age如果age没有被传入代码def printinfo(name,age35): 打印任何传入的字符串 print( Name: ,name) print( Age: ,age) return #调用printinfo函数 printinfo( age50,namemiki) printinfo(namemiki)结果但是需要注意的是默认参数的值不传入并且不报错的前提是对应的这个默认参数要有对应的值否则肯定会报错4不定长参数如果需要一个函数能够处理比当初声明时更多的参数这些参数就叫做不定长参数和上述两种参数不同声明时不会命名基本语法如下#不定长参数的语法 def functionname([formal_args,] *var_args_tuple ): 函数_文档字符串 function_suite return [expression]加了*的变量名会存放所有未命名的变量参数不定长参数实例如下代码def printinfo(arg1,*vartuple): 打印任何传入的参数 print(输出) print(arg1) for var in vartuple: print(var) return #调用printinfo函数 printinfo(10) printinfo(70,60,50)结果其实在实际写代码的时候如果第一个参数的位置和内容已经确定了那么在输入其他参数的时候会直接给出提示是哪一部分对应的参数了如上图最后一行代码括号中的内容表示7.匿名函数Python使用lambda来创建匿名函数·lambda只是一个表达式函数体比def简单很多·lambda的主体只是一个表达式而不是一个代码块仅仅能在lambda表达式中封装有限的逻辑进去·lambda函数拥有自己的命名空间且不能访问自有参数列表之外或全局命名空间里的参数·虽然lambda函数看起来只能写一行却不等同于C或者C的内联函数后者的目的是调用小函数时不占用栈内存从而增加运行效率lambda [arg1 [,arg2,.....argn]]:expression举个例子对于上面这个例子容易产生理解偏差其中arg1和arg2只是两个参数名这个冒号后面的内容代表的是这两个参数需要进行的操作并不是说这个冒号在arg2后面所以这个相加的操作是arg2的内容一定要注意这是新手容易产生的误区lambda函数的完整语法是lambda 参数列表返回值表达式8.return语句return语句[表达式]退出函数选择性地向调用方返回一个表达式不带参数值的return语句返回None之前的例子都没有示范如何返回数值下面举个例子说明9.变量作用域一个程序的所有变量并不是在哪个位置都可以访问的访问权限决定于这个变量是在哪里赋值的变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称两种最基本的变量作用于如下1全局变量全局变量是在整个程序中可访问的变量2局部变量仅在其被定义的函数内部可用举个例子说明说明全局变量在函数内部也是可以访问的但是如果函数内部的变量在函数外部访问的话就会到时NameError

更多文章