Python functions and features (required for beginners)

Source: Internet
Author: User
Tags glob hmac python decorator

Python functions and features (required for beginners)

Python is a simple and simple language. Reading a good Python program is like reading English, although it is very strict. This pseudo-code feature of Python is one of its biggest strengths. It allows you to focus on solving problems rather than the language itself.

After using Python for many years, I accidentally discovered some features that we did not know in the past. Some of them can be said to be very useful, but they are not fully utilized. With this in mind, I have edited some features of the Pyghon feature that you should understand.

 Functions with any number of parameters

You may already know that Python allows you to define optional parameters. However, there is another way to define any number of parameters of a function.

First, let's see an example of defining only optional parameters.

def function(arg1="",arg2=""):   print "arg1: {0}".format(arg1)   print "arg2: {0}".format(arg2) function("Hello", "World") # prints args1: Hello # prints args2: World function() # prints args1: # prints args2: 

Now let's see how to define a function that can accept any parameter. We use tuples.

def foo(*args): # just use "*" to collect all remaining arguments into a tuple   numargs = len(args)   print "Number of arguments: {0}".format(numargs)   for i, x in enumerate(args):     print "Argument {0} is: {1}".format(i,x) foo() # Number of arguments: 0 foo("hello") # Number of arguments: 1 # Argument 0 is: hello foo("hello","World","Again") # Number of arguments: 3 # Argument 0 is: hello # Argument 1 is: World # Argument 2 is: Again 

 Use Glob () to find files

Most Python functions have long and descriptive names. But you may not know what a function named glob () is doing unless you are familiar with it elsewhere.

It is like a more powerful version of The listdir () function. It allows you to search for files by using pattern matching.

import glob # get all py files files = glob.glob('*.py') print files # Output # ['arg.py', 'g.py', 'shut.py', 'test.py'] 

You can search for multiple file types as follows:

import itertools as it, glob def multiple_file_types(*patterns):   return it.chain.from_iterable(glob.glob(pattern) for pattern in patterns) for filename in multiple_file_types("*.txt", "*.py"): # add as many filetype arguements   print filename # output #=========# # test.txt # arg.py # g.py # shut.py # test.py 

If you want to obtain the absolute path of each file, you can call the realpath () function in the return value:

 import itertools as it, glob, os def multiple_file_types(*patterns):   return it.chain.from_iterable(glob.glob(pattern) for pattern in patterns) for filename in multiple_file_types("*.txt", "*.py"): # add as many filetype arguements   realpath = os.path.realpath(filename)   print realpath # output #=========# # C:\xxx\pyfunc\test.txt # C:\xxx\pyfunc\arg.py # C:\xxx\pyfunc\g.py # C:\xxx\pyfunc\shut.py # C:\xxx\pyfunc\test.py 

 Debugging

The following example uses the inspect module. This module is very useful for debugging purposes and has far more functions than described here.

This article will not cover every detail of this module, but will show you some examples.

import logging, inspect logging.basicConfig(level=logging.INFO,   format='%(asctime)s %(levelname)-8s %(filename)s:%(lineno)-4d: %(message)s',   datefmt='%m-%d %H:%M',   ) logging.debug('A debug message') logging.info('Some information') logging.warning('A shot across the bow') def test():   frame,filename,line_number,function_name,lines,index=\     inspect.getouterframes(inspect.currentframe())[1]   print(frame,filename,line_number,function_name,lines,index) test() # Should print the following (with current date/time of course) #10-19 19:57 INFO   test.py:9  : Some information #10-19 19:57 WARNING test.py:10 : A shot across the bow #(, 'C:/xxx/pyfunc/magic.py', 16, '', ['test()\n'], 0)

 Generate unique ID

In some cases, you need to generate a unique string. I have seen many people use the md5 () function for this purpose, but it does not.

In fact, a Python function named uuid () is used for this purpose.

import uuid result = uuid.uuid1() print result # output => various attempts # 9e177ec0-65b6-11e3-b2d0-e4d53dfcf61b # be57b880-65b6-11e3-a04d-e4d53dfcf61b # c3b2b90f-65b6-11e3-8c86-e4d53dfcf61b 

You may notice that even if strings are unique, the several characters behind them look very similar. This is because the generated string is related to the MAC address of the computer.

To reduce the number of duplicates, you can use these two functions.

import hmac,hashlib key='1'data='a'print hmac.new(key, data, hashlib.sha256).hexdigest() m = hashlib.sha1() m.update("The quick brown fox jumps over the lazy dog") print m.hexdigest() # c6e693d0b35805080632bc2469e1154a8d1072a86557778c27a01329630f8917 # 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12 

 Serialization

Do you need to store a complex variable in a database or text file? You don't need to think of a fancy way to convert arrays or object cells into formatted strings, because Python already provides this function.

import pickle variable = ['hello', 42, [1,'two'],'apple'] # serialize content file = open('serial.txt','w') serialized_obj = pickle.dumps(variable) file.write(serialized_obj) file.close() # unserialize to produce original content target = open('serial.txt','r') myObj = pickle.load(target) print serialized_obj print myObj #output # (lp0 # S'hello' # p1 # aI42 # a(lp2 # I1 # aS'two' # p3 # aaS'apple' # p4 # a. # ['hello', 42, [1, 'two'], 'apple'] 

This is a native Python serialization method. However, JSON has become popular in recent years, and Python has added support for it. Now you can use JSON for codec.

import json variable = ['hello', 42, [1,'two'],'apple'] print "Original {0} - {1}".format(variable,type(variable)) # encoding encode = json.dumps(variable) print "Encoded {0} - {1}".format(encode,type(encode)) #deccoding decoded = json.loads(encode) print "Decoded {0} - {1}".format(decoded,type(decoded)) # output # Original ['hello', 42, [1, 'two'], 'apple'] - <type 'list'=""> # Encoded ["hello", 42, [1, "two"], "apple"] - <type 'str'=""> # Decoded [u'hello', 42, [1, u'two'], u'apple'] - <type 'list'=""> 

This is more compact and most importantly compatible with JavaScript and many other languages. However, some information of complex objects may be lost.

Compressed characters

When talking about compression, we usually think of files, such as ZIP structures. In Python, long characters can be compressed without any file.

import zlib string = """  Lorem ipsum dolor sit amet, consectetur         adipiscing elit. Nunc ut elit id mi ultricies         adipiscing. Nulla facilisi. Praesent pulvinar,         sapien vel feugiat vestibulum, nulla dui pretium orci,         non ultricies elit lacus quis ante. Lorem ipsum dolor         sit amet, consectetur adipiscing elit. Aliquam         pretium ullamcorper urna quis iaculis. Etiam ac massa         sed turpis tempor luctus. Curabitur sed nibh eu elit         mollis congue. Praesent ipsum diam, consectetur vitae         ornare a, aliquam a nunc. In id magna pellentesque         tellus posuere adipiscing. Sed non mi metus, at lacinia         augue. Sed magna nisi, ornare in mollis in, mollis         sed nunc. Etiam at justo in leo congue mollis.         Nullam in neque eget metus hendrerit scelerisque         eu non enim. Ut malesuada lacus eu nulla bibendum         id euismod urna sodales. """print "Original Size: {0}".format(len(string)) compressed = zlib.compress(string) print "Compressed Size: {0}".format(len(compressed)) decompressed = zlib.decompress(compressed) print "Decompressed Size: {0}".format(len(decompressed)) # output # Original Size: 1022 # Compressed Size: 423 # Decompressed Size: 1022 

 Register the Shutdown Function

The module atexit allows you to execute some code immediately after the script is run.

If you want to measure some benchmark data at the end of script execution, such as how long it takes to run:

It seems very easy to blind. You only need to add the code to the bottom layer of the script, which will run before the script ends. However, if there is a fatal error in the script or the script is terminated by the user, it may not run.

When you use atexit. register (), your code will be executed, No matter why the script stops running.

Conclusion

Are you aware of the usefulness of Python features that are not widely known? Please share with us in the comments. Thank you for reading!

Articles you may be interested in:
  • Copy and paste Python Program
  • Introduction to functions and function parameters of the python decorator
  • Example of proxy service implementation in python
  • Common functions of python database operations (create tables, insert data, and obtain data)
  • Python simulates Sina Weibo login (Sina Weibo crawler)
  • Programming habits and features of getting started with Python
  • Add auto-completion and history functions to Python IDLE
  • Code sharing for implementing the vro login function with multiple threads and brute force cracking in python
  • Implement the constant (Const) function in Python

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.