有关函数定义,全局变量,局部变量,顺便解释print()用法

print()函数的解释:

print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    
    sep:   用什么来隔开多个打印项,默认是空格
    end:   在打印完参数之后跟什么,一般是跟一个换行符。
    
    flush: whether to forcibly flush the stream

print还有一个file参数,赋值一个文件指针,用来打印到文件中。
示例:

import sys
print("hello",file=sys.stdout)#输出到控制台显示器

with open(r"C:\Users\lenovo\Desktop\新建文本文档.txt","a") as fp:
    print("hello",file=fp)#写到指针指向的文件中,按照指针规定的方式
>>> print("a","b")
a b
>>> print("a","b",sep="--")
a--b
>>> print("jj",end="k")
jjk>>>

异常处理

try except来处理可能的异常

try:
    print(7/0)
    print(3)	#不会执行
except ZeroDivisionError:	#除数为零的异常
    print("OK")

总结

(1)print()可以打印多个字符串,默认用空格隔开,最后默认跟一个换行符。sep,end
(2)函数最后不写return一个具体值,或者不写return,就会默认return None,如print(),这就和循环最后一句默认有个continue一样。
(3)def函数定义里面的变量属于局部变量,两个函数定义中的局部变量不是共通的,即使一个函数定义里调用了另一个函数。
  函数定义之外的部分属于全局作用域,一般也就是主线,里面定义的变量属于全局变量,在函数定义里可以直接使用,无需传参。在局部作用域里不能直接修改全局变量,只能直接使用,因为因为python语法的特殊性,修改变量时,是一个赋值语句,那么就会声明一个该局部变量,如果要在局部作用域修改全局变量就需要在修改之前使用global

def spam():
    global eggs
    eggs = 2	#此处修改的eggs是全局变量
eggs = 3
spam()
print(eggs)#结果是2

反例:

def spam():
    print(eggs)#ERROR,因为下面赋值语句表明,此处eggs是一个局部变量,但此时eggs没有赋值
    eggs = 3
eggs = 4
spam()
print(eggs)

全局变量出现:

  • 函数定义之外的全局作用域
  • 在局部作用域内,但只是读取值,没有修改
  • 局部作用域内,且有global修饰
def spam():
    global eggs
    eggs = 2	#即使在eggs并没有在全局作用域声明,也可以直接global,并且以后在全局作用域内可以直接使用
spam()
print(eggs)

局部变量出现:

  • 局部作用域内声明的变量
    和java不一样,在java中比如在for循环里面声明了一个变量i,那么在for循环之外就不能使用,但是python不一样
def pp():
    print("for循环里",i)
for i in range(3):
    i = 3
    pp()
print("循环之外",i)

for循环里 3
for循环里 3
for循环里 3
循环之外 3

在上面的函数运行时,我意外发现了一个疑惑点,为什么循环里面把i变成了3之后循环没有立即停止呢?(因为很不巧我把for循环变量设置成了i,里面又对i修改了,所以产生了疑惑)这其实是因为,这里的for循环不和java里面的一样,java通常是判断循环变量的值是否超过或小于某个值,但是pyhon里面的for循环变量是需要把列表遍历一遍才会自动退出,而不是当i的值大于列表里面的最大值之后就会退出。

注意点:

(1)
input(”请输入一个数字“)
或者
s = ”请输入一个数字“
input(s)
(2)
函数定义中的变量名成为形式参数,真正函数调用时传入的变量才叫实际参数。
(3)有关可选参数
有些函数有些参数是可选的,那是因为这些参数有着默认初始值,但是注意,有默认初始值的参数需要在函数定义时放在其他参数的后面,避免函数调用时出错。
在给定参数默认值的时候等号两边不要写空格。
函数调用时,如果不想让函数修改原列表的值,那么在函数调用的时候使用列表切片lst[ : ]

def hello(name=None,char):
    print(name+" "+char)
hello("!")

(4)函数定义时的*args, **kwargs参数
*args表示任何多个无名参数,它是一个tuple

**kwargs表示关键字参数,它是一个dict
在函数调用时,前者不可以按照键值对的形式传递实际参数;后者必须按照键值对形式。
*args

def test_var_args(farg, *args):    
    print "formal arg:", farg    
    for arg in args:        
        print "another arg:", arg 
 
test_var_args(1, "two", 3)

# 输出
formal arg: 1
another arg: two
another arg: 3

**kwargs

def test_var_kwargs(farg, **kwargs):
    print "formal arg:", farg
    for key in kwargs:
        print "another keyword arg: %s: %s" % (key, kwargs[key])
 
test_var_kwargs(farg=1, myarg2="two", myarg3=3)

# 输出
formal arg: 1
another keyword arg: myarg2: two
another keyword arg: myarg3: 3

报错,因为当实际参数和形式参数个数不一致时,如果不具体指明是给哪个参数赋值,就会默认按照形式参数的顺序来赋值,而不会先照顾没有默认初始的参数
这个函数的定义对于调用来说就是不友好的,因该把有默认值参数(可选参数)放在最后。
(5)
对于程序中有可能出错的地方需要使用try、except,不然程序崩溃时会直接把错误信息反馈给用户,此时用可以看到详细的traceback信息,里面包括了具体文件名,还有错误的代码,这对黑客来说是极大的帮助。
try、except、finally、else
try后面跟可能出错的语句,当发生错误时就会立即执行except内的语句,不论try中的语句是否发生了错误,都会执行finally后面的语句,finally后的语句一般是做一些后事的处理,例如资源的释放,关闭文件等,也就是finally跟着try块或者except块执行,else里的语句是在try块语句没有发生错误时才会执行的。
综上:

try:
    fp = open(r"C:\Users\lenovo\Desktop\entence.txt")
except FileNotFoundError:	#except FileNotFoundError as e:
    print("没有找到该文件")
else:
    print("找到这个文件了")
finally:
    fp.close()
    print("文件关闭")
#没有找到该文件
#文件关闭

其中except执行的语句必须有,不能是空语句,如果实在不想执行什么,就让用户也体会不到,可以写一句pass,pass意味着什么也不做,充当占位符,还用在函数定义,还没有想好函数内部具体执行什么时候,如果什么也不写,同样是会报错的,可以写一个pass

try:
    fp = open(r"kkk.txt")
except FileNotFoundError:
    pass

(6)常遇到的异常类型

Exception可以捕获任意异常
IndexError下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5],但是切片是可以访问的
KeyError试图访问字典里不存在的键
TypeError传入对象类型与要求的不符合
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值